【学编程必知干货】你知道学编程如何才算入门吗?

 1  听别人怎么说

A说:当你明白什么叫面向对象的时候,就算入门了
 
B说:能做出界面,能连数据库进行增删改操作
 
C说:打印出“hello world”的时候
 
D说:等你理解了程序用来干嘛的时候算入门
 
E说:你自己怎么说,请在评论区留言


  2  听我说,辨真伪 

听别人说再多,不如你动手真正检验一下
 
【汉德学院】第一季编程挑战赛
 
能过三关,说明你迈过了基础的门槛
 
能成功通关达到仙人
 
说明你已经入门了
 
基础打好了,可以开始选择方向去学习了
 
还等什么,快来自行监测吧


 

000.jpg

 
  
入 门 攻 略

1、适合自己的图书才是最好的,各种编程入门书籍种类繁多,但是找一个适合自己的才是最重要的,这个需要自己去仔细翻阅鉴定。
 
2、编程学习看的过程中需要用心,多动脑思考,消化书籍中的知识点,变为自己可以理解的。另外动手实践很重要!很重要!很重要!
 
3、遇到问题多搜集问题点的资料,各种大神的解释,总有一个让你开窍的。当然如果真的不得要领,可以找我们的芸姐(qq:1531843557)或者汉德学院小美(微信:hdxy1509115),我们是很愿意助人为乐。
 
4、不要急功近利,要基础扎实,无论你是在校学生还是在职工作者,花费一个月、三个月、半年甚至一年来学习基础知识,都是值得的,也是正常的,你所花费的时间和精力,绝对和你的收获成正比。
 
5、不要大而全,要专而精:学精通一门语言,比你了解10门语言更值得,再次强调,基础很重要,基础是养成你的变成思维的过程,打好基础,未来程序员的道路才能更高更远。。
 
6、学会欣赏和分析他人的代码:初学者可以开始模仿别人的代码,但是一定要理解他们的思路和用意,不要模仿太复杂的代码,应该结合每一个知识点内容去学习和模仿。
 
7、在动手实践中不断提高:边学边练,不要找借口,现在只需要一个智能手机,在【汉德学院】上完全可以满足,不需要再去找专门时间打开电脑安装环境等(这个借口不成立了)。
 
8、值得肯定的是,编程基础知识学好了,找工作问题不大,这一点绝对优势。
 
9、最后总结:学编程,没有捷径!没有捷径!没有捷径!如果有,那就是老老实实的学习并且练习。   



 

(听说转发的,9月有好运降临哦!)
缺女友的,找到了女朋友
工作的,升职加薪
求学的,考试过关
缺钱的,本月有小财
继续阅读 »
 1  听别人怎么说

A说:当你明白什么叫面向对象的时候,就算入门了
 
B说:能做出界面,能连数据库进行增删改操作
 
C说:打印出“hello world”的时候
 
D说:等你理解了程序用来干嘛的时候算入门
 
E说:你自己怎么说,请在评论区留言


  2  听我说,辨真伪 

听别人说再多,不如你动手真正检验一下
 
【汉德学院】第一季编程挑战赛
 
能过三关,说明你迈过了基础的门槛
 
能成功通关达到仙人
 
说明你已经入门了
 
基础打好了,可以开始选择方向去学习了
 
还等什么,快来自行监测吧


 

000.jpg

 
  
入 门 攻 略

1、适合自己的图书才是最好的,各种编程入门书籍种类繁多,但是找一个适合自己的才是最重要的,这个需要自己去仔细翻阅鉴定。
 
2、编程学习看的过程中需要用心,多动脑思考,消化书籍中的知识点,变为自己可以理解的。另外动手实践很重要!很重要!很重要!
 
3、遇到问题多搜集问题点的资料,各种大神的解释,总有一个让你开窍的。当然如果真的不得要领,可以找我们的芸姐(qq:1531843557)或者汉德学院小美(微信:hdxy1509115),我们是很愿意助人为乐。
 
4、不要急功近利,要基础扎实,无论你是在校学生还是在职工作者,花费一个月、三个月、半年甚至一年来学习基础知识,都是值得的,也是正常的,你所花费的时间和精力,绝对和你的收获成正比。
 
5、不要大而全,要专而精:学精通一门语言,比你了解10门语言更值得,再次强调,基础很重要,基础是养成你的变成思维的过程,打好基础,未来程序员的道路才能更高更远。。
 
6、学会欣赏和分析他人的代码:初学者可以开始模仿别人的代码,但是一定要理解他们的思路和用意,不要模仿太复杂的代码,应该结合每一个知识点内容去学习和模仿。
 
7、在动手实践中不断提高:边学边练,不要找借口,现在只需要一个智能手机,在【汉德学院】上完全可以满足,不需要再去找专门时间打开电脑安装环境等(这个借口不成立了)。
 
8、值得肯定的是,编程基础知识学好了,找工作问题不大,这一点绝对优势。
 
9、最后总结:学编程,没有捷径!没有捷径!没有捷径!如果有,那就是老老实实的学习并且练习。   



 

(听说转发的,9月有好运降临哦!)
缺女友的,找到了女朋友
工作的,升职加薪
求学的,考试过关
缺钱的,本月有小财 收起阅读 »

【非看不可,榜上有名】第一批荣誉榜单,快来围观!

【汉德学院】java编程排位赛,经过我们第一批的内测玩家献言建策,终于在9月于大家见面了!

感谢之情无语言表。快来看看都有谁榜上有名!

最佳通关仙人


第一批内测玩家
一路攻关夺寨 
遥遥领先
今日完成通关登顶
高居榜首 分数了得
鲜花+鲜花+鲜花*10000朵
膜拜


通关证据

090504.jpg


090505.png


090502.jpg



最佳排雷工兵


作为第一批内测玩家
【在God的Boy】积极排雷
将我们第一季中题目里的很多陷阱曝光
(有很多是工作人员失误造成:P)
为大家后面的挑战排除了bug
铺平了道路
掌声+掌声+掌声 * 10000次

不过还有一些雷没有被挖开
等待后面的挑战者排除



080501.jpg


最有潜力新人


年仅19岁
初中就自学完成高等数学
学习编程悟性非常高
未来方向是数据挖掘、算法
有独到的见解和精准的目标
膜拜+膜拜+膜拜*10000次
这才是少年应该有的样子



090503.jpg


有奉献的内测玩家们


在内测期间
为我们奉献很多好的建议
发现各种问题和程序bug
恭喜荣登【汉德学院】第一期荣誉榜单
我们在这里鉴证和记录
你们是【汉德学院】永远的VIP荣誉成员



090506.jpg

 
快来挑战你的java代码
宣传.jpg

 
继续阅读 »
【汉德学院】java编程排位赛,经过我们第一批的内测玩家献言建策,终于在9月于大家见面了!

感谢之情无语言表。快来看看都有谁榜上有名!

最佳通关仙人


第一批内测玩家
一路攻关夺寨 
遥遥领先
今日完成通关登顶
高居榜首 分数了得
鲜花+鲜花+鲜花*10000朵
膜拜


通关证据

090504.jpg


090505.png


090502.jpg



最佳排雷工兵


作为第一批内测玩家
【在God的Boy】积极排雷
将我们第一季中题目里的很多陷阱曝光
(有很多是工作人员失误造成:P)
为大家后面的挑战排除了bug
铺平了道路
掌声+掌声+掌声 * 10000次

不过还有一些雷没有被挖开
等待后面的挑战者排除



080501.jpg


最有潜力新人


年仅19岁
初中就自学完成高等数学
学习编程悟性非常高
未来方向是数据挖掘、算法
有独到的见解和精准的目标
膜拜+膜拜+膜拜*10000次
这才是少年应该有的样子



090503.jpg


有奉献的内测玩家们


在内测期间
为我们奉献很多好的建议
发现各种问题和程序bug
恭喜荣登【汉德学院】第一期荣誉榜单
我们在这里鉴证和记录
你们是【汉德学院】永远的VIP荣誉成员



090506.jpg

 
快来挑战你的java代码
宣传.jpg

  收起阅读 »

Python这么火,那些人可以学?

现在都有哪些人在学Python,为什么学?

      要问程序员,目前最火的编程语言是什么??一定是Python,这个后起之秀了不得,短短几年,跃居编程语言前三甲,大有盖过老大Java的风头。

     目前很多行业中,越来越多的应用Python,从目前招聘趋势也能看出这一点。这也是很多行业学习Python的原因,那么Python主要的应用领域有哪些呢?都有哪几类人在学习:

第一类:纯小白学编程的新手:大学刚毕业或者其他行业转岗,想从事编程开发的工作,目前认为Python比较火,想入行,加之各种培训机构宣传的快速入门高薪就业的形式,让Python的学习需求高涨。

第二类:Linux系统运维人员:Linux运维算是苦不堪言,繁杂混乱,对人员系统掌握知识的能力要求非常高,这就应运而生地需要一个编程语言能解决自动化的问题,而Python开发运维工作目前是首选,Python运维工资的薪资普遍比Linux运维人员的工资高,能够实现对繁杂工作的自动化、简洁化,高工资是必然的。

第三类:做数据分析或者人工智能:我们了解Python语言一个片面的方面,就是用来实现大数据分析,不管是常见的大数据分析或者一般的金融分析、科学分析都比较大程度的应用了数据分析,人工智能的一些常见应用也使用了Python的一些技术。  

第四类:在职程序员转Python开发:平常做一些web前端开发的程序员,他们更多只关注div+css这些页面技术,他们都需要与后端开发人员进行交互的,随着Python语言的出现,它优美的代码和高效的开发效率,让java开发工程师们为此折服,因此很多在职的java程序员转行Python开发。

第五类:其他:比如一些做SEO优化的工程师,因为以前不懂编程,在程序处理问题上得不到解决,现在有了Python语言,可以简单地上手,能够实现一些简单地查询、排名、生成网络地图等功能,解决自己在SEO上面的问题。

不过,上面一说,大家是不是感觉Python语言很简单呢?其实它入门的话,真的很简单,至少比Java、c++等要简单得多。

好吧,问题来了,简单地话,我们该怎么学习。

学习Python编程,我们应该如何学?大概的学习内容包括哪些? 

      我想可能很多网友可能都没有接触过编程,学习Python会有以下的问题:  从零开始,不知道如何下手开始学?  基本的数据结构、设计模式等计算机基础问题难以掌握,遇到这里问题不知道如何解决?

其实,我们完全可以从简单开始学习Python编程语言,而且动手实践是一件非常愉快的事情。这里要推荐【汉德学院】的Python编程课程,适合小白入门学习,同时可以随时动手操作实践代码。注意一点,遇到问题要及时解决(比如求助汉德学院(微信公众号、汉德学院课程中、i码邦、QQ群、微信群、客服等等,能够联系我们的地方都可以留言咨询,我们将尽快为您提供帮助)),不要积累到后面,小问题堆积成大问题,会让自己产生消极放弃的念头。

 给想学习Python编程的朋友,一些小建议:  

1、先系统自学用Python课程,不要看视频教程。某个点不能理解的时候,再去找有关知识点的更多资料或者视频。

  2.对Python基础数据类型有一个了解,学会各种类型的操作方法,了解函数和类的概念。

  3、学会查官方文档,用好搜索引擎和开发者社区。不但要学写代码,还要学会看代码,更要会调试代码。读懂你自己程序的报错信息。再去找些github上的程序,读懂别人的代码。 

 4、动手实践,找小项目练习。前面几个阶段要快,都是为这个阶段做铺垫,,这时可能遇到各种困难,这时回头复习所学的知识点,同时去搜索这些知识点,如果自己写不出来也可以参考别人的项目去做点事情,过一阵子对python了解后自己就知道该学啥了,是web开发,还是爬虫,或者数据分析,机器学习。

5.除了学习编程语言,也兼顾补一点计算机基础,和英语。

6、分享本文章到微信朋友圈,并且发给10个微信朋友群,即可免费获赠Python实战课程。(找汉德学院小美(hdxy1509115)开通)

=====================================

你有没有发现:【汉德学院】中提供了上百种可持续学习的课程,包括java、c、C#、c++、php、Python等语言课程,也包括算法、数据结构、设计模式等这种基础课程,也包括Erlang、Docker、Hadoop、HBase、Maven、Spring Security、Servlet、JSP、JSON等这些应用型教程。

部分课程内容
18073107.png

还等什么,一个【汉德学院】在手,所有编程学习都不愁。
 

 
继续阅读 »
现在都有哪些人在学Python,为什么学?

      要问程序员,目前最火的编程语言是什么??一定是Python,这个后起之秀了不得,短短几年,跃居编程语言前三甲,大有盖过老大Java的风头。

     目前很多行业中,越来越多的应用Python,从目前招聘趋势也能看出这一点。这也是很多行业学习Python的原因,那么Python主要的应用领域有哪些呢?都有哪几类人在学习:

第一类:纯小白学编程的新手:大学刚毕业或者其他行业转岗,想从事编程开发的工作,目前认为Python比较火,想入行,加之各种培训机构宣传的快速入门高薪就业的形式,让Python的学习需求高涨。

第二类:Linux系统运维人员:Linux运维算是苦不堪言,繁杂混乱,对人员系统掌握知识的能力要求非常高,这就应运而生地需要一个编程语言能解决自动化的问题,而Python开发运维工作目前是首选,Python运维工资的薪资普遍比Linux运维人员的工资高,能够实现对繁杂工作的自动化、简洁化,高工资是必然的。

第三类:做数据分析或者人工智能:我们了解Python语言一个片面的方面,就是用来实现大数据分析,不管是常见的大数据分析或者一般的金融分析、科学分析都比较大程度的应用了数据分析,人工智能的一些常见应用也使用了Python的一些技术。  

第四类:在职程序员转Python开发:平常做一些web前端开发的程序员,他们更多只关注div+css这些页面技术,他们都需要与后端开发人员进行交互的,随着Python语言的出现,它优美的代码和高效的开发效率,让java开发工程师们为此折服,因此很多在职的java程序员转行Python开发。

第五类:其他:比如一些做SEO优化的工程师,因为以前不懂编程,在程序处理问题上得不到解决,现在有了Python语言,可以简单地上手,能够实现一些简单地查询、排名、生成网络地图等功能,解决自己在SEO上面的问题。

不过,上面一说,大家是不是感觉Python语言很简单呢?其实它入门的话,真的很简单,至少比Java、c++等要简单得多。

好吧,问题来了,简单地话,我们该怎么学习。

学习Python编程,我们应该如何学?大概的学习内容包括哪些? 

      我想可能很多网友可能都没有接触过编程,学习Python会有以下的问题:  从零开始,不知道如何下手开始学?  基本的数据结构、设计模式等计算机基础问题难以掌握,遇到这里问题不知道如何解决?

其实,我们完全可以从简单开始学习Python编程语言,而且动手实践是一件非常愉快的事情。这里要推荐【汉德学院】的Python编程课程,适合小白入门学习,同时可以随时动手操作实践代码。注意一点,遇到问题要及时解决(比如求助汉德学院(微信公众号、汉德学院课程中、i码邦、QQ群、微信群、客服等等,能够联系我们的地方都可以留言咨询,我们将尽快为您提供帮助)),不要积累到后面,小问题堆积成大问题,会让自己产生消极放弃的念头。

 给想学习Python编程的朋友,一些小建议:  

1、先系统自学用Python课程,不要看视频教程。某个点不能理解的时候,再去找有关知识点的更多资料或者视频。

  2.对Python基础数据类型有一个了解,学会各种类型的操作方法,了解函数和类的概念。

  3、学会查官方文档,用好搜索引擎和开发者社区。不但要学写代码,还要学会看代码,更要会调试代码。读懂你自己程序的报错信息。再去找些github上的程序,读懂别人的代码。 

 4、动手实践,找小项目练习。前面几个阶段要快,都是为这个阶段做铺垫,,这时可能遇到各种困难,这时回头复习所学的知识点,同时去搜索这些知识点,如果自己写不出来也可以参考别人的项目去做点事情,过一阵子对python了解后自己就知道该学啥了,是web开发,还是爬虫,或者数据分析,机器学习。

5.除了学习编程语言,也兼顾补一点计算机基础,和英语。

6、分享本文章到微信朋友圈,并且发给10个微信朋友群,即可免费获赠Python实战课程。(找汉德学院小美(hdxy1509115)开通)

=====================================

你有没有发现:【汉德学院】中提供了上百种可持续学习的课程,包括java、c、C#、c++、php、Python等语言课程,也包括算法、数据结构、设计模式等这种基础课程,也包括Erlang、Docker、Hadoop、HBase、Maven、Spring Security、Servlet、JSP、JSON等这些应用型教程。

部分课程内容
18073107.png

还等什么,一个【汉德学院】在手,所有编程学习都不愁。
 

  收起阅读 »

2018年程序员最新调查状况--经济决定上层建筑

唐伯虎如果知道他的诗这样改造,会怎样?
程序员的世界,非程序员真的不懂!
 写字楼里写字间,写字间里程序员;程序员在写程序,却拿程序换酒钱;酒醒只在机前坐,酒醉仍在机边眠;酒醉酒醒日复日,机前机边年复年;

但愿老死代码间,不愿鞠躬老板前;名牌西装我无趣,T恤牛仔程序员;若将舒坦贵贱比,谁人有我自在天,若将世界比代码,都得听从我指尖。别人笑我太疯癫,我笑他人是等闲;不见年年独角兽,哪个缺了程序员。


2018年程序员现状报告新鲜出炉了!

1、程序员性别比例、单身比例


10073001.png


虽然大家都知道程序员男多女少,但是调查结果还是让人大吃一惊,男女比例竟然12:1。此比例完美的解释了为什么女程序员在工作中往往能够获得“众星捧月”的待遇。而单身的程序员比例也挺高,应该是高于其他行业。

2、年轻的程序员和他们的婚姻

18073002.png


都说程序员是吃青春饭的,现实也真的如此,在程序员这个职业,35岁就该退休或者转行,看来是真的。百分之九十多的程序员小于35岁,70%以上的程序员不到30岁。未来几年,程序员还将年轻化,井喷式发展。

18073003.png


3、程序员更喜欢一线城市

调查显示,程序员主要集中在一线城市,这类城市互联网企业聚集,薪资待遇更好,因此程序员扎堆也是理所应当的。

其中北京(17.18%)、杭州(13.50%)、上海(11.04%)、广州(9.52%)和深圳(8.59%)。

4、程序员吃喝拉撒住,住的咋样呢?

因为年轻化,单身的多,所以程序员中有75.6%的人在外租房,其中70%以上的租房房租达到1k多,40%以上的达到2k多,租房房租3k以上的也都是在以上五大城市地区,俗话说,挣得多才花的多,程序员有这个资本。

剩下的有12.9%的程序员已经实现自己买房,其余的应该是单位提供住房或者自家本身就有住房。

5、程序员都在什么公司呢?私企、国企?

18073005.png


互联网企业大多数是新兴民营企业,因此高达70%的程序员在这类民营企业,还有10%的程序员是自由职业者,在国有企业的程序员只有4.2%。但是我国的军工航天也还是离不开程序员的贡献的。

6、程序员爱跳槽,你看有多爱跳槽呢

18073006.png


调查中,有80%的程序员都跳过槽,那些一辈子在一个单位的人无法想象吧。

这些人里面只有跳过一次槽的15%,有过两次跳槽的20.5%,有过3次跳槽的21.1%,有过5次以上跳槽的14.7%,跳槽的主要目的是为了更好地发展空间和薪资待遇,人为财死,毕竟是青春饭,趁年轻多挣点无可厚非。

7、程序员最喜欢的语言排行榜

18073007.png


从图中可以看出,擅长和喜欢java的还是最多的,高达41.4%,接近程序员的半数。其他还有php占了(22.4%)、Python占了15.2%)、C语言占了(14.3%,还是有绝对的优势)、C#占了(13.3%)和C++占了(12.9%)调查中各种语言可以多选。

8、重点来了,程序员薪资待遇咋样

我们常听说,0基础小白,培训5个月,月薪上万,程序员真的是掘金行业吗?

18073008.png


从上图可以看出,只有6.2%的程序员年薪是5万以下,这些都是刚入职不久的新人,年龄都在25岁以下,大多数程序员年薪在9万到30万之间,年薪达到40万以上的应该算是企业的高管或者高级程序员,这么看来,程序员是高薪行业是名副其实的。怪不得大家都要往这行来。

而全球范围内,程序员都是高薪职业,甚至业界大佬和各国领导都在呼吁,编程要从娃娃抓起,因此程序员还是值得从事的职业!


============================

你有没有发现:【汉德学院】中提供了上百种可持续学习的课程,包括java、c、C#、c++、php、Python等语言课程,也包括算法、数据结构、设计模式等这种基础课程,也包括Erlang、Docker、Hadoop、HBase、Maven、Spring Security、Servlet、JSP、JSON等这些应用型教程。

还等什么,一个【汉德学院】在手,所有编程学习都不愁。



 
继续阅读 »
唐伯虎如果知道他的诗这样改造,会怎样?
程序员的世界,非程序员真的不懂!
 写字楼里写字间,写字间里程序员;程序员在写程序,却拿程序换酒钱;酒醒只在机前坐,酒醉仍在机边眠;酒醉酒醒日复日,机前机边年复年;

但愿老死代码间,不愿鞠躬老板前;名牌西装我无趣,T恤牛仔程序员;若将舒坦贵贱比,谁人有我自在天,若将世界比代码,都得听从我指尖。别人笑我太疯癫,我笑他人是等闲;不见年年独角兽,哪个缺了程序员。


2018年程序员现状报告新鲜出炉了!

1、程序员性别比例、单身比例


10073001.png


虽然大家都知道程序员男多女少,但是调查结果还是让人大吃一惊,男女比例竟然12:1。此比例完美的解释了为什么女程序员在工作中往往能够获得“众星捧月”的待遇。而单身的程序员比例也挺高,应该是高于其他行业。

2、年轻的程序员和他们的婚姻

18073002.png


都说程序员是吃青春饭的,现实也真的如此,在程序员这个职业,35岁就该退休或者转行,看来是真的。百分之九十多的程序员小于35岁,70%以上的程序员不到30岁。未来几年,程序员还将年轻化,井喷式发展。

18073003.png


3、程序员更喜欢一线城市

调查显示,程序员主要集中在一线城市,这类城市互联网企业聚集,薪资待遇更好,因此程序员扎堆也是理所应当的。

其中北京(17.18%)、杭州(13.50%)、上海(11.04%)、广州(9.52%)和深圳(8.59%)。

4、程序员吃喝拉撒住,住的咋样呢?

因为年轻化,单身的多,所以程序员中有75.6%的人在外租房,其中70%以上的租房房租达到1k多,40%以上的达到2k多,租房房租3k以上的也都是在以上五大城市地区,俗话说,挣得多才花的多,程序员有这个资本。

剩下的有12.9%的程序员已经实现自己买房,其余的应该是单位提供住房或者自家本身就有住房。

5、程序员都在什么公司呢?私企、国企?

18073005.png


互联网企业大多数是新兴民营企业,因此高达70%的程序员在这类民营企业,还有10%的程序员是自由职业者,在国有企业的程序员只有4.2%。但是我国的军工航天也还是离不开程序员的贡献的。

6、程序员爱跳槽,你看有多爱跳槽呢

18073006.png


调查中,有80%的程序员都跳过槽,那些一辈子在一个单位的人无法想象吧。

这些人里面只有跳过一次槽的15%,有过两次跳槽的20.5%,有过3次跳槽的21.1%,有过5次以上跳槽的14.7%,跳槽的主要目的是为了更好地发展空间和薪资待遇,人为财死,毕竟是青春饭,趁年轻多挣点无可厚非。

7、程序员最喜欢的语言排行榜

18073007.png


从图中可以看出,擅长和喜欢java的还是最多的,高达41.4%,接近程序员的半数。其他还有php占了(22.4%)、Python占了15.2%)、C语言占了(14.3%,还是有绝对的优势)、C#占了(13.3%)和C++占了(12.9%)调查中各种语言可以多选。

8、重点来了,程序员薪资待遇咋样

我们常听说,0基础小白,培训5个月,月薪上万,程序员真的是掘金行业吗?

18073008.png


从上图可以看出,只有6.2%的程序员年薪是5万以下,这些都是刚入职不久的新人,年龄都在25岁以下,大多数程序员年薪在9万到30万之间,年薪达到40万以上的应该算是企业的高管或者高级程序员,这么看来,程序员是高薪行业是名副其实的。怪不得大家都要往这行来。

而全球范围内,程序员都是高薪职业,甚至业界大佬和各国领导都在呼吁,编程要从娃娃抓起,因此程序员还是值得从事的职业!


============================

你有没有发现:【汉德学院】中提供了上百种可持续学习的课程,包括java、c、C#、c++、php、Python等语言课程,也包括算法、数据结构、设计模式等这种基础课程,也包括Erlang、Docker、Hadoop、HBase、Maven、Spring Security、Servlet、JSP、JSON等这些应用型教程。

还等什么,一个【汉德学院】在手,所有编程学习都不愁。



  收起阅读 »

编程怎么学?学什么?看招聘要求下菜。

面对市面上五花八门的编程语言,很多人可能会有疑惑,说那我到底该学什么呢?

我觉得吧,学什么不是最重要的,重要的是学了什么可以容易的找到工作,在理不?在理不?在理不?(本帖留言在理有惊喜哦,分享本帖更有惊喜,请注明你学习的课程,分享给谁怎么分享你看着办)

所以说嘛,我们就要多去各种招聘渠道看看人家招聘的程序员都要求会什么,然后咱就去学什么。
来来来,一起看一下某联招聘关于 Java 的任职要求:

18072702.png


这是某东的招聘要求:

18072801.jpg

这是某狐的招聘要求:

18072802.png


怎么样,是不是觉得要学的太多了,是不是有点懵逼了?

这里注意:以上都是java开发工程师的要求,其他的大家可以自己去了解。有一个非常非常重要的点,大家关注到没有?"java基础扎实"、你care到没有?

好了,这一点对入门者特别重要,无论是学习其他那种语言(C语言、C++、C#、Python、PHP等等),我们都应该把这门语言的基础学习扎实了,否则后面的架子很容易倒掉。

下面我们用java工程师举例说明:

毋庸置疑,要把 Java SE 学好,也就是把 Java 基础打好,这个阶段学好有助于后期框架的学习。比如把多线程、网络通信、设计模式还有 jdbc 等学扎实了,学习过程中记得在自己的博客上做笔记(记住每次学习的知识点,问题、问题的解决情况等等),画画思维导图等等。

面试的时候很多面试官必问你关于 Java SE 的知识,一个两个答不上来还好,接连好几个基础知识都不会,你说多尴尬。

然后,要学习前端的知识,比如 HTML、CSS、Ajax、JQuery 等。虽然 Java 是做后台开发,但是少不了和前端进行交互,所以很有必要学一学了解这些知识基本面。来点实惠鸡血:工作中,做前端的漂亮妹子遇到个问题,来请教你,你说,「啊,碰巧这个,我也不会唉」,此时你的另外一个男同事凑过了看了一眼说,「姑娘,这个问题我应该可以解决,不如下班以后我们探讨一下?」,然后故事的剧情我就不用说了吧,留你一人独自受尽冷风吹...


数据库的学习尤为重要,基本的使用来说,比如 oracle、MySQL等,是很容易上手的。好好学学数据库的一些常用函数,以及会写 SQL 语句,面试时大多数公司不要求写 SQL 语句的。


框架的学习,刚接触框架的时候可能会感觉很不适应,各种各样的配置文件会把你搞晕,但是这是好事情,因为这意味着更复杂的东西别人都替你弄好了,你只需要组合组合就可以用了。换位思考,静下心来,多问多敲,光看可不行,框架一定要操作实践,你才能有收获。


最后,多看一些网上大神写的代码,学习别人的代码思想,学习他们的代码结构。最好自己能做个小项目,一来可以把学过的知识都运用起来,二来积累项目经验,为以后工作做准备。
 


免费10天***刻意学习营***(可在前面文章了解学习营)

三门编程入门课程可选:java、Python、PHP

入营任务1:

关注公众号【爱编程i码邦】报名转发本文声明“我要报名,参加【汉德学院】*刻意学习营*选拔,请帮我转发点赞”,集赞10个以上的,联系汉德学院小美(微信号:hdxy1509115)


 
继续阅读 »
面对市面上五花八门的编程语言,很多人可能会有疑惑,说那我到底该学什么呢?

我觉得吧,学什么不是最重要的,重要的是学了什么可以容易的找到工作,在理不?在理不?在理不?(本帖留言在理有惊喜哦,分享本帖更有惊喜,请注明你学习的课程,分享给谁怎么分享你看着办)

所以说嘛,我们就要多去各种招聘渠道看看人家招聘的程序员都要求会什么,然后咱就去学什么。
来来来,一起看一下某联招聘关于 Java 的任职要求:

18072702.png


这是某东的招聘要求:

18072801.jpg

这是某狐的招聘要求:

18072802.png


怎么样,是不是觉得要学的太多了,是不是有点懵逼了?

这里注意:以上都是java开发工程师的要求,其他的大家可以自己去了解。有一个非常非常重要的点,大家关注到没有?"java基础扎实"、你care到没有?

好了,这一点对入门者特别重要,无论是学习其他那种语言(C语言、C++、C#、Python、PHP等等),我们都应该把这门语言的基础学习扎实了,否则后面的架子很容易倒掉。

下面我们用java工程师举例说明:

毋庸置疑,要把 Java SE 学好,也就是把 Java 基础打好,这个阶段学好有助于后期框架的学习。比如把多线程、网络通信、设计模式还有 jdbc 等学扎实了,学习过程中记得在自己的博客上做笔记(记住每次学习的知识点,问题、问题的解决情况等等),画画思维导图等等。

面试的时候很多面试官必问你关于 Java SE 的知识,一个两个答不上来还好,接连好几个基础知识都不会,你说多尴尬。

然后,要学习前端的知识,比如 HTML、CSS、Ajax、JQuery 等。虽然 Java 是做后台开发,但是少不了和前端进行交互,所以很有必要学一学了解这些知识基本面。来点实惠鸡血:工作中,做前端的漂亮妹子遇到个问题,来请教你,你说,「啊,碰巧这个,我也不会唉」,此时你的另外一个男同事凑过了看了一眼说,「姑娘,这个问题我应该可以解决,不如下班以后我们探讨一下?」,然后故事的剧情我就不用说了吧,留你一人独自受尽冷风吹...


数据库的学习尤为重要,基本的使用来说,比如 oracle、MySQL等,是很容易上手的。好好学学数据库的一些常用函数,以及会写 SQL 语句,面试时大多数公司不要求写 SQL 语句的。


框架的学习,刚接触框架的时候可能会感觉很不适应,各种各样的配置文件会把你搞晕,但是这是好事情,因为这意味着更复杂的东西别人都替你弄好了,你只需要组合组合就可以用了。换位思考,静下心来,多问多敲,光看可不行,框架一定要操作实践,你才能有收获。


最后,多看一些网上大神写的代码,学习别人的代码思想,学习他们的代码结构。最好自己能做个小项目,一来可以把学过的知识都运用起来,二来积累项目经验,为以后工作做准备。
 


免费10天***刻意学习营***(可在前面文章了解学习营)

三门编程入门课程可选:java、Python、PHP

入营任务1:

关注公众号【爱编程i码邦】报名转发本文声明“我要报名,参加【汉德学院】*刻意学习营*选拔,请帮我转发点赞”,集赞10个以上的,联系汉德学院小美(微信号:hdxy1509115)


  收起阅读 »

如何成为理想中的程序员?定好基调很关键

也许我们在编程方面不具备天才成分,但是我们可以通过努力,去让自己成为理想中的程序员——献给每一位想成为优秀程序员的小白


很多被坑蒙拐骗带进程序员大门的人,带着一脸的懵逼,带着迷茫的眼神,被压迫着一路狂奔,这些人中,有的算是误入歧途,有的却歪打正着。那么无论是哪一种,你不具备天才成分,那么你还拥有努力的资本。

程序员是一个职业,跟厨师、医生、老师、快递、保洁等等一样的职业,只不过他们看起来轻松,实际上压力巨大。

么无论我们如何进入这一行业,只要已经进门,就要做好全力以赴的准备和努力,才不辜负选择这条路的初衷,我们成为不了超级大牛大神,但是我们至少可以做一个规范并理想的程序员。

我们暂且将程序员划分为三类:

1、天才程序员

2、理想程序员

3、平庸程序员



天才程序员是天生尤物,少之又少,在整个程序员中的占比1%左右。这类人从生下来基因就决定了他的能力,有这超高的数学天赋,冷静缜密的逻辑思维,享受型技术热忱。

平庸的程序员占比90%,IT时代的膨胀,让程序员变成一个快速养成的产业,如同流水线上的产品,被一批一批生产出来,分发到各个生产线去从事开发。毫无疑问,平庸程序员编写着一成不变的代码,遇到问题就会卡壳,自诩程序员又瞧不起程序员。
 
理想的程序员算是高质量严要求的产物,他们追求精益求精,乐于分享自己的开发经验,他们开发的项目回报大于投入。

要成为理想的程序员,必须做到以下几点:

1、专注于开发本身,不要心猿意马,如果发现自身不适合开发,可以提前转型退场,不要身在曹营心在汉,等到被退休被转型的那一刻。

2、绩效管理自己,如何高效的学习和工作,要做好有目的有方向的管理,制定合适的计划,作为高强度的脑力工作者,其实每天集中四五个小时在工作或者学习上,就足以完成每天的任务,其他时间可以放松。

3、会学习,身为程序员,我们不得不面对日异月新的技术变化,要有足够的学习新知识的能力,要快速上手新技术,才能做到以不变应万变,学习的重点是针对需求去寻求解决方案,有需求学起来才稳准快。



 
祝愿每一个读到这篇文章的人,都是你心目中那个理想的自己。
继续阅读 »
也许我们在编程方面不具备天才成分,但是我们可以通过努力,去让自己成为理想中的程序员——献给每一位想成为优秀程序员的小白


很多被坑蒙拐骗带进程序员大门的人,带着一脸的懵逼,带着迷茫的眼神,被压迫着一路狂奔,这些人中,有的算是误入歧途,有的却歪打正着。那么无论是哪一种,你不具备天才成分,那么你还拥有努力的资本。

程序员是一个职业,跟厨师、医生、老师、快递、保洁等等一样的职业,只不过他们看起来轻松,实际上压力巨大。

么无论我们如何进入这一行业,只要已经进门,就要做好全力以赴的准备和努力,才不辜负选择这条路的初衷,我们成为不了超级大牛大神,但是我们至少可以做一个规范并理想的程序员。

我们暂且将程序员划分为三类:

1、天才程序员

2、理想程序员

3、平庸程序员



天才程序员是天生尤物,少之又少,在整个程序员中的占比1%左右。这类人从生下来基因就决定了他的能力,有这超高的数学天赋,冷静缜密的逻辑思维,享受型技术热忱。

平庸的程序员占比90%,IT时代的膨胀,让程序员变成一个快速养成的产业,如同流水线上的产品,被一批一批生产出来,分发到各个生产线去从事开发。毫无疑问,平庸程序员编写着一成不变的代码,遇到问题就会卡壳,自诩程序员又瞧不起程序员。
 
理想的程序员算是高质量严要求的产物,他们追求精益求精,乐于分享自己的开发经验,他们开发的项目回报大于投入。

要成为理想的程序员,必须做到以下几点:

1、专注于开发本身,不要心猿意马,如果发现自身不适合开发,可以提前转型退场,不要身在曹营心在汉,等到被退休被转型的那一刻。

2、绩效管理自己,如何高效的学习和工作,要做好有目的有方向的管理,制定合适的计划,作为高强度的脑力工作者,其实每天集中四五个小时在工作或者学习上,就足以完成每天的任务,其他时间可以放松。

3、会学习,身为程序员,我们不得不面对日异月新的技术变化,要有足够的学习新知识的能力,要快速上手新技术,才能做到以不变应万变,学习的重点是针对需求去寻求解决方案,有需求学起来才稳准快。



 
祝愿每一个读到这篇文章的人,都是你心目中那个理想的自己。 收起阅读 »

我该如何学好一门编程?纯小白学编程必看

首先,明确一个问题,那就是你为什么要学习编程?学习编程的决定因素是什么??
 
为什么要学习编程?首要因素(单选请在本文后回复abcde并留言,有机会获得实战课程赠课)
a.  真的喜欢,发自内心的想学
b.  编程就业容易,目前的职业不喜欢,打算改行
c.   软件开发的待遇好,工资高
d.   编程是未来必须具备的技能,提前准备
e.   其他,请留言说明,会有惊喜哦
 
好,明确了你的首要动力,那么对于小白来说,下面的几点才有意义。
 
一、如何选择编程语言

        很多刚进入大学或者刚开始学习程序设计的同学都对编程充满好奇,非常想学习编程但是又不知道从何入手,特别是面对五花八门的编程语言,不知道该选哪个开始学习,这里给大家一些建议希望能对初学者有帮助。

       简而言之,这个问题取决于你自己的专业或你学习编程的目的(上面的调查表你选择了吗?,有记录在,你可以常回来看看自己的初心)。

       如果你是计算机专业的,那么强烈建议从C语言开始,(现在的大学理科课程大部分都会开设C语言课程,如果你是理科生,恭喜你要抓住大学课堂机会)。虽然表面看起来C语言的使用在萎缩,但是随着你对编程的深入学习,你会发现C的重要性,一个有如此悠久历史的语言为何到今天还是排名世界第二。有了C语言的基础以后你学其他任何语言都事半功倍,如果你以后的工作需要在Linux下完成,那么C更是必须精通的。

2018年2月TIOBE编程语言排行榜

如果你不是计算机专业的,也没有任何计算机编程背景,那么从哪里开始学习就要看你的具体需求了,要和你的应用场景结合来考虑编程语言的选择。

事实上,不管是C、Java还是现在非常火的Python,从0开始用来入门都是没有问题的,只要这门语言满足你的需求。重要的是——立即开始,并坚持学下去!

这里给推荐一个最方便小白入门学习以上编程语言的平台,【汉德学院】小程序,有目前流行的各类编程语言的入门实战教程。可以一边学习,一边动手编写代码。
 
二、如何学好一门编程语言

任何语言的存在都是为了用来交流沟通的,编程语言也不例外,只不过编程语言的交流对象是计算机而已。计算机本身是没有什么思想的,而我们是采用了一些它能够听得懂的「语言」来让它帮我们做事情的。所以不要觉得编程是特别高大上的事情,它远没有我们想象中的复杂。

只要你静下心来,踏踏实实的看,认认真真的做,都是可以学好的。但是一定要注意,编程的学习千万不要贪图速度,一股脑的把一本书看完却不做练习是不可能有效果的。边做边练才是学习编程的正确打开方式。千万注意哦,这里说的练习一定是你把书上的例子用你自己的方式写出来才可以(写的时候不要看书,全程独立完成)!

计算机是很听话的,你想做什么只需要用编程语言告诉它每一步应该怎么做怎么走就行,之所以编程中会出现 bug 就是因为它前进的过程中找不到自己需要的东西,或者你告诉它的做法它无法理解,这时候计算机就会不开心地停下来。那么就需要我们用计算机的处理思维去解决这些问题,解决了,计算机就会顺畅的处理下去。


那么,既然了解了编程入门不是很难,那么到底是自学好,还是去培训机构学好呢?
 
其实这个问题取决于你自己,如果你平常时间充裕而且自制力特别强,当然可以自学,但是自学的话会有一些问题,比如说学习过程中遇到问题出了 bug 该如何解决?自己是不是能够坚持下来?

去正规培训机构学当然也成,但是如果哪个机构说包教包会包分配,找不到工作不收学费,这种情况我建议你还是不要去试水了,天上没有掉馅饼的好事儿,谨记。


另外,开始入门的时候你可以看一些系统的编程语言的教程,比如上面推荐的【汉德学院】中的教程,在学习的过程中,遇到没看懂的章节和知识点,可以搜一些讲解视频加深理解。同时可以加入一些群进行交流互动,或者在【汉德学院】的课程中提问留言,寻求直接的帮助。


值得提醒的是,再厉害的程序也是一点点敲出来的,你可能看别人三下五除二就把代码敲出来觉得很简单,但是,千万千万千万不要眼高手低,一定要自己动手操作,另外,你在学习过程中需要有个记笔记的好习惯,把自己敲代码过程中遇到的各种 bug 和学到的知识点整理起来。

遇到问题,首先自己想办法解决,Google 也好百度也罢,查看官方文档、寻求大牛的文章等也行,总之自己先试着解决。如果解决不掉,去虚心请教身边大神或者技术交流群等。也欢迎留言,我们也有大神帮你解决。

现在,你明确你要从哪门语言开始了吗?你觉得哪门语言最适合入门呢?你觉得你适合自学还是去参加培训呢?

欢迎你在此留言,系列编程课程的干货将陆续奉上。
 
=====================
你有没有发现:【汉德学院】中提供了上百种可持续学习的课程,包括java、c、C#、c++、php、Python等语言课程,也包括算法、数据结构、设计模式等这种基础课程,也包括Erlang、Docker、Hadoop、HBase、Maven、Spring Security、Servlet、JSP、JSON等这些应用型教程。

还等什么,一个【汉德学院】在手,所有编程学习都不愁。

zh5.png

 
继续阅读 »
首先,明确一个问题,那就是你为什么要学习编程?学习编程的决定因素是什么??
 
为什么要学习编程?首要因素(单选请在本文后回复abcde并留言,有机会获得实战课程赠课)
a.  真的喜欢,发自内心的想学
b.  编程就业容易,目前的职业不喜欢,打算改行
c.   软件开发的待遇好,工资高
d.   编程是未来必须具备的技能,提前准备
e.   其他,请留言说明,会有惊喜哦
 
好,明确了你的首要动力,那么对于小白来说,下面的几点才有意义。
 
一、如何选择编程语言

        很多刚进入大学或者刚开始学习程序设计的同学都对编程充满好奇,非常想学习编程但是又不知道从何入手,特别是面对五花八门的编程语言,不知道该选哪个开始学习,这里给大家一些建议希望能对初学者有帮助。

       简而言之,这个问题取决于你自己的专业或你学习编程的目的(上面的调查表你选择了吗?,有记录在,你可以常回来看看自己的初心)。

       如果你是计算机专业的,那么强烈建议从C语言开始,(现在的大学理科课程大部分都会开设C语言课程,如果你是理科生,恭喜你要抓住大学课堂机会)。虽然表面看起来C语言的使用在萎缩,但是随着你对编程的深入学习,你会发现C的重要性,一个有如此悠久历史的语言为何到今天还是排名世界第二。有了C语言的基础以后你学其他任何语言都事半功倍,如果你以后的工作需要在Linux下完成,那么C更是必须精通的。

2018年2月TIOBE编程语言排行榜

如果你不是计算机专业的,也没有任何计算机编程背景,那么从哪里开始学习就要看你的具体需求了,要和你的应用场景结合来考虑编程语言的选择。

事实上,不管是C、Java还是现在非常火的Python,从0开始用来入门都是没有问题的,只要这门语言满足你的需求。重要的是——立即开始,并坚持学下去!

这里给推荐一个最方便小白入门学习以上编程语言的平台,【汉德学院】小程序,有目前流行的各类编程语言的入门实战教程。可以一边学习,一边动手编写代码。
 
二、如何学好一门编程语言

任何语言的存在都是为了用来交流沟通的,编程语言也不例外,只不过编程语言的交流对象是计算机而已。计算机本身是没有什么思想的,而我们是采用了一些它能够听得懂的「语言」来让它帮我们做事情的。所以不要觉得编程是特别高大上的事情,它远没有我们想象中的复杂。

只要你静下心来,踏踏实实的看,认认真真的做,都是可以学好的。但是一定要注意,编程的学习千万不要贪图速度,一股脑的把一本书看完却不做练习是不可能有效果的。边做边练才是学习编程的正确打开方式。千万注意哦,这里说的练习一定是你把书上的例子用你自己的方式写出来才可以(写的时候不要看书,全程独立完成)!

计算机是很听话的,你想做什么只需要用编程语言告诉它每一步应该怎么做怎么走就行,之所以编程中会出现 bug 就是因为它前进的过程中找不到自己需要的东西,或者你告诉它的做法它无法理解,这时候计算机就会不开心地停下来。那么就需要我们用计算机的处理思维去解决这些问题,解决了,计算机就会顺畅的处理下去。


那么,既然了解了编程入门不是很难,那么到底是自学好,还是去培训机构学好呢?
 
其实这个问题取决于你自己,如果你平常时间充裕而且自制力特别强,当然可以自学,但是自学的话会有一些问题,比如说学习过程中遇到问题出了 bug 该如何解决?自己是不是能够坚持下来?

去正规培训机构学当然也成,但是如果哪个机构说包教包会包分配,找不到工作不收学费,这种情况我建议你还是不要去试水了,天上没有掉馅饼的好事儿,谨记。


另外,开始入门的时候你可以看一些系统的编程语言的教程,比如上面推荐的【汉德学院】中的教程,在学习的过程中,遇到没看懂的章节和知识点,可以搜一些讲解视频加深理解。同时可以加入一些群进行交流互动,或者在【汉德学院】的课程中提问留言,寻求直接的帮助。


值得提醒的是,再厉害的程序也是一点点敲出来的,你可能看别人三下五除二就把代码敲出来觉得很简单,但是,千万千万千万不要眼高手低,一定要自己动手操作,另外,你在学习过程中需要有个记笔记的好习惯,把自己敲代码过程中遇到的各种 bug 和学到的知识点整理起来。

遇到问题,首先自己想办法解决,Google 也好百度也罢,查看官方文档、寻求大牛的文章等也行,总之自己先试着解决。如果解决不掉,去虚心请教身边大神或者技术交流群等。也欢迎留言,我们也有大神帮你解决。

现在,你明确你要从哪门语言开始了吗?你觉得哪门语言最适合入门呢?你觉得你适合自学还是去参加培训呢?

欢迎你在此留言,系列编程课程的干货将陆续奉上。
 
=====================
你有没有发现:【汉德学院】中提供了上百种可持续学习的课程,包括java、c、C#、c++、php、Python等语言课程,也包括算法、数据结构、设计模式等这种基础课程,也包括Erlang、Docker、Hadoop、HBase、Maven、Spring Security、Servlet、JSP、JSON等这些应用型教程。

还等什么,一个【汉德学院】在手,所有编程学习都不愁。

zh5.png

  收起阅读 »

销售已经开始需要软件行业背景,你还在拒绝编程吗?

科技改变世界,越来越多行业不可避免的参与了科技改造,因此

越来越多的行业都离不开信息、技术、编程,

越来越多的职业需要有这些的支撑。
 
分享一个朋友圈招聘信息:

050801.jpg

 
编程教育的普及,定会是未来的需求,编程教育其实比英语更为重要。

通过多年的接触,我们发现很多编程学习的小白,有一个很大的困惑,就是0基础开始直接学习专业的编程课程,对于那些基础知识点基础概念都很难理解,在一开始就陷入困境,那么如何在开始的时候更好的引导编程学习,是【汉德学院&i码邦】一直关注和努力的方向,现在我们推出了在专业知识学习之前,进行编程思维训练的小游戏,可以让每一个0基础的小白,轻松走进编程的世界,用编程思维去解决问题,虽然是简单的小游戏,但是里面确涵盖了编程的基础知识点,编程的处理思维和处理机制,对后面我们学习专业知识非常有帮助。
 
关注微信公众号【爱编程i码邦】,我们将用好玩有趣的方式,带你走入编程的海洋。
 
 建议:对于现在0基础开始学习编程的想从事软件开发职业的,最好先从简单好玩的编程思维训练开始,【汉德学院】提供了一套编程思维训练小游戏,大家通过游戏闯关就可以完成编程的基础知识学习和基本概念的掌握,然后开始专业知识学习,会更容易理解专业的知识点。 

050701.jpg

 
专业知识分享:java工程师如何在工作中提升自己?

作为一个程序员首先要有自己的规划有自己的职业规划,有一个至少三年的规划,让自己在工作知道自己的方向在哪,才能不至于一脑袋扎在工作不管不顾了,等到发现自己辛辛苦苦积累的技能在社会上处于慢慢被淘汰的境地,那样该有多尴尬。
  1. 不要觉得现在已经工作了就放松对基础知识的学习,基本功的学习,把基础一遍遍的打磨。
  2. 争取对一个框架有一个比较深刻的了解,开始先学会如何使用框架,一定要完整的参与一个项目,利用实际的项目把该框架使用好,然后慢慢总结出里面的规律技巧,在项目中涉及不到的知识点,要想办法弥补上,慢慢消化理解转换为属于自己的一套知识框架系统。对一个框架深刻的了解之后开始尝试深层次的定制框架,同时开展后续框架的学习,进一步拓展知识面积累框架的感知度
  3. java属于一种入门相对简单,但是要做到高级有相当难度的高级语言,难在对框架准确把握上,最直接的提升通道多做实际的项目,尽量不要做重复性质的项目,当然这个还要根据公司的实际情况,如果遇到的是一直用一个框架做重复的项目的公司,就要考虑换个工作环境来提升自己了。

 
 
继续阅读 »
科技改变世界,越来越多行业不可避免的参与了科技改造,因此

越来越多的行业都离不开信息、技术、编程,

越来越多的职业需要有这些的支撑。
 
分享一个朋友圈招聘信息:

050801.jpg

 
编程教育的普及,定会是未来的需求,编程教育其实比英语更为重要。

通过多年的接触,我们发现很多编程学习的小白,有一个很大的困惑,就是0基础开始直接学习专业的编程课程,对于那些基础知识点基础概念都很难理解,在一开始就陷入困境,那么如何在开始的时候更好的引导编程学习,是【汉德学院&i码邦】一直关注和努力的方向,现在我们推出了在专业知识学习之前,进行编程思维训练的小游戏,可以让每一个0基础的小白,轻松走进编程的世界,用编程思维去解决问题,虽然是简单的小游戏,但是里面确涵盖了编程的基础知识点,编程的处理思维和处理机制,对后面我们学习专业知识非常有帮助。
 
关注微信公众号【爱编程i码邦】,我们将用好玩有趣的方式,带你走入编程的海洋。
 
 建议:对于现在0基础开始学习编程的想从事软件开发职业的,最好先从简单好玩的编程思维训练开始,【汉德学院】提供了一套编程思维训练小游戏,大家通过游戏闯关就可以完成编程的基础知识学习和基本概念的掌握,然后开始专业知识学习,会更容易理解专业的知识点。 

050701.jpg

 
专业知识分享:java工程师如何在工作中提升自己?

作为一个程序员首先要有自己的规划有自己的职业规划,有一个至少三年的规划,让自己在工作知道自己的方向在哪,才能不至于一脑袋扎在工作不管不顾了,等到发现自己辛辛苦苦积累的技能在社会上处于慢慢被淘汰的境地,那样该有多尴尬。
  1. 不要觉得现在已经工作了就放松对基础知识的学习,基本功的学习,把基础一遍遍的打磨。
  2. 争取对一个框架有一个比较深刻的了解,开始先学会如何使用框架,一定要完整的参与一个项目,利用实际的项目把该框架使用好,然后慢慢总结出里面的规律技巧,在项目中涉及不到的知识点,要想办法弥补上,慢慢消化理解转换为属于自己的一套知识框架系统。对一个框架深刻的了解之后开始尝试深层次的定制框架,同时开展后续框架的学习,进一步拓展知识面积累框架的感知度
  3. java属于一种入门相对简单,但是要做到高级有相当难度的高级语言,难在对框架准确把握上,最直接的提升通道多做实际的项目,尽量不要做重复性质的项目,当然这个还要根据公司的实际情况,如果遇到的是一直用一个框架做重复的项目的公司,就要考虑换个工作环境来提升自己了。

 
 
收起阅读 »

Java中Scanner用法总结

Scanner类简介

Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。它是以前的StringTokenizer和Matcher类之间的某种结合。由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析。借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器。

关于nextInt()、next()和nextLine()的理解

nextInt(): it only reads the int value, nextInt() places the cursor(光标) in the same line after reading the input.(nextInt()只读取数值,剩下”\n”还没有读取,并将cursor放在本行中)

next(): read the input only till the space. It can’t read two words separated by space. Also, next() places the cursor in the same line after reading the input.(next()只读空格之前的数据,并且cursor指向本行) 
next() 方法遇见第一个有效字符(非空格,非换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描,获取扫描到的内容,即获得第一个扫描到的不含空格、换行符的单个字符串。

nextLine(): reads input including space between the words (that is, it reads till the end of line \n). Once the input is read, nextLine() positions the cursor in the next line. 
nextLine()时,则可以扫描到一行内容并作为一个字符串而被获取到。
 

public class NextTest{
   public static void main(String[] args) { 
    String s1,s2; 
    Scanner sc=new Scanner(System.in); 
    System.out.print("请输入第一个字符串:"); 
    s1=sc.nextLine();
     System.out.print("请输入第二个字符串:"); 
    s2=sc.next(); 
    System.out.println("输入的字符串是:"+s1+" "+s2); 
   }
 }



结果:
请输入第一个字符串:home 
请输入第二个字符串:work 
输入的字符串是:home work1

把上面的程序修改一下:s1=sc.next(); s2=sc.nextLine();


运行结果:
请输入第一个字符串:home 
请输入第二个字符串:
输入的字符串是:home


可以看到,nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法给s2从键盘输入值。经过验证,我发现其他的next的方法,如double nextDouble() , float nextFloat() , int nextInt() 等与nextLine()连用时都存在这个问题,解决的办法是:在每一个 next()、nextDouble() 、 nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。
 

public class NextTest{ 
  public static void main(String[] args) { 
    String s1,s2; 
    Scanner sc=new Scanner(System.in);
     System.out.print("请输入第一个字符串:");
     s1=sc.next(); sc.nextLine(); 
    System.out.print("请输入第二个字符串:"); 
    s2=sc.nextLine();
    System.out.println("输入的字符串是:"+s1+" "+s2); 
  } 
}



运行结果:
请输入第一个字符串:home 
请输入第二个字符串:work 
输入的字符串是:home work

循环输入多组测试用例

一个while就是一个测试用例
 

public static void main(String[] args){
        Scanner in = new Scanner(System.in);

        // 一个while就是一个测试用例
        while(in.hasNext()){
            int n = in.nextInt(); // 该测试用例后续接收的参数个数
            long[] array = new long[n];
            String[] arrayStr = new String[n];
            for(int i=0; i<n; i++){
                arrayStr[i] = in.next();
            }
            for(int i=0; i<n; i++){
                array[i] = in.nextLong();// 取下一个元素转换成long类型
            }

            System.out.println(Arrays.toString(array)+" "+ Arrays.toString(arrayStr));
        }
    }



一个与容器结合的综合例子:
 

import java.util.Scanner;    
public class Main {    
    public static void main(String[] args) {    
        Scanner in = new Scanner(System.in);    
        while (in.hasNext()) {    
            int n = in.nextInt();   
        /* nextLine()是扫描器执行当前行,并返回跳过的输入信息,特别需要注意!!! 

            如果没有该行,则执行第一个in.nextLine()命令时的返回值是int n = in.nextInt()的值*/   
            in.nextLine();  
        HashSet<String> set = new HashSet<String>();  
        for (int i = 0; i < n; i++) {   
        String line =  in.nextLine();   
        String[] arr = line.split(" ");   
        for (int j = 0; j < arr.length; j++) {   
            set.add(arr[j]);   
        }  
         }  
        System.out.println("sum:" + set.size());    

    }    
}



输入: 

a b c 
d e f 
a b c 
输出: 
6
继续阅读 »
Scanner类简介

Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。它是以前的StringTokenizer和Matcher类之间的某种结合。由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析。借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器。

关于nextInt()、next()和nextLine()的理解

nextInt(): it only reads the int value, nextInt() places the cursor(光标) in the same line after reading the input.(nextInt()只读取数值,剩下”\n”还没有读取,并将cursor放在本行中)

next(): read the input only till the space. It can’t read two words separated by space. Also, next() places the cursor in the same line after reading the input.(next()只读空格之前的数据,并且cursor指向本行) 
next() 方法遇见第一个有效字符(非空格,非换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描,获取扫描到的内容,即获得第一个扫描到的不含空格、换行符的单个字符串。

nextLine(): reads input including space between the words (that is, it reads till the end of line \n). Once the input is read, nextLine() positions the cursor in the next line. 
nextLine()时,则可以扫描到一行内容并作为一个字符串而被获取到。
 

public class NextTest{
   public static void main(String[] args) { 
    String s1,s2; 
    Scanner sc=new Scanner(System.in); 
    System.out.print("请输入第一个字符串:"); 
    s1=sc.nextLine();
     System.out.print("请输入第二个字符串:"); 
    s2=sc.next(); 
    System.out.println("输入的字符串是:"+s1+" "+s2); 
   }
 }



结果:
请输入第一个字符串:home 
请输入第二个字符串:work 
输入的字符串是:home work1

把上面的程序修改一下:s1=sc.next(); s2=sc.nextLine();


运行结果:
请输入第一个字符串:home 
请输入第二个字符串:
输入的字符串是:home


可以看到,nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法给s2从键盘输入值。经过验证,我发现其他的next的方法,如double nextDouble() , float nextFloat() , int nextInt() 等与nextLine()连用时都存在这个问题,解决的办法是:在每一个 next()、nextDouble() 、 nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。
 

public class NextTest{ 
  public static void main(String[] args) { 
    String s1,s2; 
    Scanner sc=new Scanner(System.in);
     System.out.print("请输入第一个字符串:");
     s1=sc.next(); sc.nextLine(); 
    System.out.print("请输入第二个字符串:"); 
    s2=sc.nextLine();
    System.out.println("输入的字符串是:"+s1+" "+s2); 
  } 
}



运行结果:
请输入第一个字符串:home 
请输入第二个字符串:work 
输入的字符串是:home work

循环输入多组测试用例

一个while就是一个测试用例
 

public static void main(String[] args){
        Scanner in = new Scanner(System.in);

        // 一个while就是一个测试用例
        while(in.hasNext()){
            int n = in.nextInt(); // 该测试用例后续接收的参数个数
            long[] array = new long[n];
            String[] arrayStr = new String[n];
            for(int i=0; i<n; i++){
                arrayStr[i] = in.next();
            }
            for(int i=0; i<n; i++){
                array[i] = in.nextLong();// 取下一个元素转换成long类型
            }

            System.out.println(Arrays.toString(array)+" "+ Arrays.toString(arrayStr));
        }
    }



一个与容器结合的综合例子:
 

import java.util.Scanner;    
public class Main {    
    public static void main(String[] args) {    
        Scanner in = new Scanner(System.in);    
        while (in.hasNext()) {    
            int n = in.nextInt();   
        /* nextLine()是扫描器执行当前行,并返回跳过的输入信息,特别需要注意!!! 

            如果没有该行,则执行第一个in.nextLine()命令时的返回值是int n = in.nextInt()的值*/   
            in.nextLine();  
        HashSet<String> set = new HashSet<String>();  
        for (int i = 0; i < n; i++) {   
        String line =  in.nextLine();   
        String[] arr = line.split(" ");   
        for (int j = 0; j < arr.length; j++) {   
            set.add(arr[j]);   
        }  
         }  
        System.out.println("sum:" + set.size());    

    }    
}



输入: 

a b c 
d e f 
a b c 
输出: 
6 收起阅读 »

星期五️每日正能量:再慢只要在路上就能进步

星期五️每日正能量:
无论你犯了多少错,或者你进步得有多慢,你都走在了那些不曾尝试的人的前面!

《汉德学院&i码邦》与你一起加油,新的一天,自学编程课程每一天,你都会进步一点!
 

index.jpg


zh4.jpg

 
继续阅读 »
星期五️每日正能量:
无论你犯了多少错,或者你进步得有多慢,你都走在了那些不曾尝试的人的前面!

《汉德学院&i码邦》与你一起加油,新的一天,自学编程课程每一天,你都会进步一点!
 

index.jpg


zh4.jpg

  收起阅读 »

培训后找不到工作培训机构该负责吗?

上次的调查文章引起大家的热议,我们看看技术交流群中大家怎么说的! 

查看前一篇文章:【编程培训机构该不该承诺无效全额退款?有奖调查!】
 
【市长】:这个调查我看了 我觉得吧 天下没有免费的午餐 自己创造了的机会  却没抓住 不好怪别人吧 
【管理员】:那是你没有见过很多培训机构出来的,找不到工作,还背了一身债务的人
【管理员】:有些本来是工厂工人的,初中毕业的,学习文科的,都是因为培训机构宣传容易找到高薪工作,最后工作没有找到,还落了满身债务
【管理员】培训机构难道不应该负有责任吗?
【市长】  :+1
【管理员】夸大的宣传,高额的费用,不负责任的制度,
【管理员】都是造成这些可怜人更加可怜的结果

 【科员】   金:毕竟更多的机构是以赚钱为目的,而不是以教书育人为目的 所以后者崇高 有重担在身 有使命感 是辛勤的园丁 前者才是真正的社会呗 和象牙塔还是有很大区别的
【管理员】钱可以赚,但是责任不能丢,不能掩盖自己的问题
【管理员】培训不缺市场,缺的是对待每个人的那份责任心 

 【市长】:哎 换个角度想想 如果自己满怀期待的想要去学it 从此走上高薪 迎娶白富美的命运 结果呢  对方告诉他 不 你不适合这个 你离开吧  这门我不给你开  你看会发生什么呢 他会觉得你害他 你不愿意他好 不要浪费时间给年轻人讲道理 因为没意义,他有的是大把时间去尝试 去浪费啊(感觉好老气横秋啊哈哈哈  前两天看的书里的一句话 大概这意思)

【管理员】那为什么还会有那么多培训机构出来找不到工作的人?你说他们没有这样的幻想吗?到最后的结果是什么?
【管理员】教育是一件神圣而严谨的事情,每一个教育者都负有对别人期待的责任,也应该尽到责任 

【科员】   :确实大学毕业有好多企业只负责招根本不管是否适合
【管理员】:这就是中国教育的悲哀,趋利式教育,造就了不平等和不平衡

你的努力有可能因为选择错误而徒劳
【市长】上海--小月 :唉 有的人上完了大学找不到工作 大学需要负责任么 然后还要去培训机构学学,然后还没找到工作 这又该怪谁呢……
【管理员】:大学学习找不到工作,那看几方面原因,很多大学生都是在宿舍打游戏,并且没有明确的目标,浑浑噩噩度日子。
【市长】:是啊 都是自己的选择嘛
【管理员】:但是很多人因为培训机构说0基础无条件可以入门,可以高薪,然后才去培训机构学习,他们一样付出了努力,付出了时间,付出了精力。
【管理员】:然而没有人告诉他们这一行并不适合他们
【市长】:那种是挺惨的
【市长】:不过一般这样的 入门混口饭吃没问题吧……
【管理员】:如果培训机构够负责人,在一个月内绝对可以发现一个授训人员是否适合
【市长】 :比如我
【管理员】:你可以去培训机构被培训,混饭吃没问题,因为你已经不是小白了。
【管理员】:可是很多人,就连门都进不去,更别说混饭吃
【管理员】:我真的见到身边太多这样的孩子,被糊弄进去,然后贷款,然后找不到工作,即使找到了也是最底层,工资待遇差的远,还面临着随时被辞退的可能,因为他自己真的能力有限,仅限于照猫画虎,稍有变化,都无法应付

小白应该做怎样的选择准备
【市长】:其实我觉得 去当个技工挺好的 刷到高级了也是抢手货
【管理员】:这些在进入培训的早期就应该被修正过来
【市长】 :不过各行各业都是这样吧  
【市长】 :不准备下怎么行 比如先把javase的学完 觉得虽然有难度但是还可以接受然后去培训, 肯定比从小白去强吧 一点基础都没得 哪有一蹴而就的事啊  
【管理员】: 是呀,你知道这个道理,但是小白们不知道

【市长】:边学边练 至少是给了一条比较好走的路 

【管理员】:是的,但是现在IT人员薪资高,被抄的太热,
【市长】:男怕入错行
【管理员】:薪水太高,感觉好像入门太容易,各种机构都是0基础小白变java大牛
【管理员】:如果培训机构真敢承诺,那他才是真的牛,真的敢保证百分之百小白变大牛
【管理员】:就连小学初中的名师,也不敢承诺手把手教每一个孩子,都能成为学霸
【管理员】:更何况抽象和高端的IT行业
【管理员】:一点基础没有,机构宣传的就是0基础小白变大牛,还有那么多高薪就业案例,大家当然就相信了
【管理员】:虽然我们不能用个例推到全部,但是也不能用样板掩盖这些个例
 
有这样血淋淋的例子,为少数人发声,远离被无线夸大的职业培训的伤害,职业这是一辈子的事情。

1.png


2.png


3.png


4.png


5.jpg

 
本帖下留言,并转发微信朋友圈或qq空间或者微博 本话题,即可免费获赠【汉德学院】以下价值99元的实战课程一门。
连续参加有奖调查活动5次以上者,可获赠以下全部9节实战课程。
可选赠送课程:

1、Java从入门到精通(实战课程)
2、C语言从入门到精通(实战课程)
3、C++从入门到精通(实战课程)
4、PHP 从入门到精通(实战课程)
5、Python 2.x 从入门到精通(实战课程)
6、C#从入门到精通(实战课程)
7、Ruby从入门到精通(实战课程)
8、HTML5 教程(实战课程)
9、CSS 教程(实战课程)
更多实战课程陆续发布中,敬请期待!
参加活动的用户,可以加下面二维码,发送自己的活动截图和选择课程,免费开通学习课程。
继续阅读 »
上次的调查文章引起大家的热议,我们看看技术交流群中大家怎么说的! 

查看前一篇文章:【编程培训机构该不该承诺无效全额退款?有奖调查!】
 
【市长】:这个调查我看了 我觉得吧 天下没有免费的午餐 自己创造了的机会  却没抓住 不好怪别人吧 
【管理员】:那是你没有见过很多培训机构出来的,找不到工作,还背了一身债务的人
【管理员】:有些本来是工厂工人的,初中毕业的,学习文科的,都是因为培训机构宣传容易找到高薪工作,最后工作没有找到,还落了满身债务
【管理员】培训机构难道不应该负有责任吗?
【市长】  :+1
【管理员】夸大的宣传,高额的费用,不负责任的制度,
【管理员】都是造成这些可怜人更加可怜的结果

 【科员】   金:毕竟更多的机构是以赚钱为目的,而不是以教书育人为目的 所以后者崇高 有重担在身 有使命感 是辛勤的园丁 前者才是真正的社会呗 和象牙塔还是有很大区别的
【管理员】钱可以赚,但是责任不能丢,不能掩盖自己的问题
【管理员】培训不缺市场,缺的是对待每个人的那份责任心 

 【市长】:哎 换个角度想想 如果自己满怀期待的想要去学it 从此走上高薪 迎娶白富美的命运 结果呢  对方告诉他 不 你不适合这个 你离开吧  这门我不给你开  你看会发生什么呢 他会觉得你害他 你不愿意他好 不要浪费时间给年轻人讲道理 因为没意义,他有的是大把时间去尝试 去浪费啊(感觉好老气横秋啊哈哈哈  前两天看的书里的一句话 大概这意思)

【管理员】那为什么还会有那么多培训机构出来找不到工作的人?你说他们没有这样的幻想吗?到最后的结果是什么?
【管理员】教育是一件神圣而严谨的事情,每一个教育者都负有对别人期待的责任,也应该尽到责任 

【科员】   :确实大学毕业有好多企业只负责招根本不管是否适合
【管理员】:这就是中国教育的悲哀,趋利式教育,造就了不平等和不平衡

你的努力有可能因为选择错误而徒劳
【市长】上海--小月 :唉 有的人上完了大学找不到工作 大学需要负责任么 然后还要去培训机构学学,然后还没找到工作 这又该怪谁呢……
【管理员】:大学学习找不到工作,那看几方面原因,很多大学生都是在宿舍打游戏,并且没有明确的目标,浑浑噩噩度日子。
【市长】:是啊 都是自己的选择嘛
【管理员】:但是很多人因为培训机构说0基础无条件可以入门,可以高薪,然后才去培训机构学习,他们一样付出了努力,付出了时间,付出了精力。
【管理员】:然而没有人告诉他们这一行并不适合他们
【市长】:那种是挺惨的
【市长】:不过一般这样的 入门混口饭吃没问题吧……
【管理员】:如果培训机构够负责人,在一个月内绝对可以发现一个授训人员是否适合
【市长】 :比如我
【管理员】:你可以去培训机构被培训,混饭吃没问题,因为你已经不是小白了。
【管理员】:可是很多人,就连门都进不去,更别说混饭吃
【管理员】:我真的见到身边太多这样的孩子,被糊弄进去,然后贷款,然后找不到工作,即使找到了也是最底层,工资待遇差的远,还面临着随时被辞退的可能,因为他自己真的能力有限,仅限于照猫画虎,稍有变化,都无法应付

小白应该做怎样的选择准备
【市长】:其实我觉得 去当个技工挺好的 刷到高级了也是抢手货
【管理员】:这些在进入培训的早期就应该被修正过来
【市长】 :不过各行各业都是这样吧  
【市长】 :不准备下怎么行 比如先把javase的学完 觉得虽然有难度但是还可以接受然后去培训, 肯定比从小白去强吧 一点基础都没得 哪有一蹴而就的事啊  
【管理员】: 是呀,你知道这个道理,但是小白们不知道

【市长】:边学边练 至少是给了一条比较好走的路 

【管理员】:是的,但是现在IT人员薪资高,被抄的太热,
【市长】:男怕入错行
【管理员】:薪水太高,感觉好像入门太容易,各种机构都是0基础小白变java大牛
【管理员】:如果培训机构真敢承诺,那他才是真的牛,真的敢保证百分之百小白变大牛
【管理员】:就连小学初中的名师,也不敢承诺手把手教每一个孩子,都能成为学霸
【管理员】:更何况抽象和高端的IT行业
【管理员】:一点基础没有,机构宣传的就是0基础小白变大牛,还有那么多高薪就业案例,大家当然就相信了
【管理员】:虽然我们不能用个例推到全部,但是也不能用样板掩盖这些个例
 
有这样血淋淋的例子,为少数人发声,远离被无线夸大的职业培训的伤害,职业这是一辈子的事情。

1.png


2.png


3.png


4.png


5.jpg

 
本帖下留言,并转发微信朋友圈或qq空间或者微博 本话题,即可免费获赠【汉德学院】以下价值99元的实战课程一门。
连续参加有奖调查活动5次以上者,可获赠以下全部9节实战课程。
可选赠送课程:

1、Java从入门到精通(实战课程)
2、C语言从入门到精通(实战课程)
3、C++从入门到精通(实战课程)
4、PHP 从入门到精通(实战课程)
5、Python 2.x 从入门到精通(实战课程)
6、C#从入门到精通(实战课程)
7、Ruby从入门到精通(实战课程)
8、HTML5 教程(实战课程)
9、CSS 教程(实战课程)
更多实战课程陆续发布中,敬请期待!
参加活动的用户,可以加下面二维码,发送自己的活动截图和选择课程,免费开通学习课程。
收起阅读 »

大学里我们应该怎样做?以后的职业道路才更好走

起点高低决定不了能力高低

大学小社会,这几年很多大专院校升为本科,二本升为一本,三本升为二本,本科的招生人数也一直在提升,就业竞争非常激烈。致使很多学校起点很低,但是我们起点低,却不能自甘堕落。

大学完全可以重新开始,一切还来得及。

那我们要怎么做才是对我们未来规划有帮助的呢?

抓住任何有利的成长机遇

大学里,相当于小社会,是我们从学生走入社会的过渡期,没有高中那么紧迫的作业,时间比较充裕,我们有很多事情可以去做,社团,学生会,社会活动,学习感兴趣的专业知识,能带你成长的老师或者学长等等,这些都是以前所不曾有的。

机会和优秀的资源有很多,只要你积极,只要你抓住。这些宝贵的经验经历,对你未来的工作影响深远

不要去做一些无没有价值的兼职,虽然可以短时挣外快,但是我们应该看长远,只有把技能知识学好,多参与跟未来工作有关的社会实践,就业后你才能拿更高的工资,才能有更好的晋升。

勇于承担不怕麻烦

在大学里,我们要有承担责任和承担义务的精神,虽然承担更多的事情和责任,意味着会有更多的痛苦,增加更多的负重,特别是你不擅长的领域,或者没做过的事情。 

但是尽管痛苦,尽管困难重重,最初做这些事情的时候,即使寸步难行,也要去尝试和经历,一旦你经历过一两次之后,你就掌握了这方面的技能和拥有了经验,很多事情不是靠天赋,而是靠坚持和坚定。  打破自己的牢笼,最终坚持越多,你的承受能力会越强,也就会给自己创造更多成长的机会。 

向每一个比你强的人学习一点

三人行必有我师,别人的优点,我们都应该学习,以平和的心态看待别人比你优秀的地方,然后去学习,不要简单的模仿。 如果学习不来,也不能勉强自己,可能确实不是很擅长,也不是适合自己,那么尽量减少自己在这个地方的错误。他人所长,是最好的学习榜样,在交往中了解,在事实中去感悟,增加自己处理事情的成熟度,这是受益匪浅的。

不要当纯小白,提前为你增加职业经验

刚毕业不意味着就没有经验,纯小白我们都知道很难找到工作,及时你不要工资,也很少有企业愿意去花时间花人力培养你,实习是很好的增加经验机会,因此不要轻易浪费实习机会,不要轻易去不对口的单位实习。那么在实习之前,我们应该怎么做呢?比如:我们将来要从事java方面的web开发,那么我们在学校课程中,就可以动手做一点有关web开发的实践项目,了解web开发的流程,大学期间,做过5个大小不同的项目,你的经验将截然不同。

 总结--可以依靠的是自己

相信自己是可以的,无论你出身无论你学校无论你的专业,珍惜大学时光,大学是最能决定自己前途的一段时光,这段时间你是自己的主宰,你唯一可以信赖的,就是自己。

最后祝愿所有的大学生们都能够成长为自己想要成为的那个人,学有所成。

想学编程知识,来【汉德学院】自学,上百种编程系统课程,上千个源码案例实操,各种免费公益课程正在开展。微信扫码开始学习。
继续阅读 »
起点高低决定不了能力高低

大学小社会,这几年很多大专院校升为本科,二本升为一本,三本升为二本,本科的招生人数也一直在提升,就业竞争非常激烈。致使很多学校起点很低,但是我们起点低,却不能自甘堕落。

大学完全可以重新开始,一切还来得及。

那我们要怎么做才是对我们未来规划有帮助的呢?

抓住任何有利的成长机遇

大学里,相当于小社会,是我们从学生走入社会的过渡期,没有高中那么紧迫的作业,时间比较充裕,我们有很多事情可以去做,社团,学生会,社会活动,学习感兴趣的专业知识,能带你成长的老师或者学长等等,这些都是以前所不曾有的。

机会和优秀的资源有很多,只要你积极,只要你抓住。这些宝贵的经验经历,对你未来的工作影响深远

不要去做一些无没有价值的兼职,虽然可以短时挣外快,但是我们应该看长远,只有把技能知识学好,多参与跟未来工作有关的社会实践,就业后你才能拿更高的工资,才能有更好的晋升。

勇于承担不怕麻烦

在大学里,我们要有承担责任和承担义务的精神,虽然承担更多的事情和责任,意味着会有更多的痛苦,增加更多的负重,特别是你不擅长的领域,或者没做过的事情。 

但是尽管痛苦,尽管困难重重,最初做这些事情的时候,即使寸步难行,也要去尝试和经历,一旦你经历过一两次之后,你就掌握了这方面的技能和拥有了经验,很多事情不是靠天赋,而是靠坚持和坚定。  打破自己的牢笼,最终坚持越多,你的承受能力会越强,也就会给自己创造更多成长的机会。 

向每一个比你强的人学习一点

三人行必有我师,别人的优点,我们都应该学习,以平和的心态看待别人比你优秀的地方,然后去学习,不要简单的模仿。 如果学习不来,也不能勉强自己,可能确实不是很擅长,也不是适合自己,那么尽量减少自己在这个地方的错误。他人所长,是最好的学习榜样,在交往中了解,在事实中去感悟,增加自己处理事情的成熟度,这是受益匪浅的。

不要当纯小白,提前为你增加职业经验

刚毕业不意味着就没有经验,纯小白我们都知道很难找到工作,及时你不要工资,也很少有企业愿意去花时间花人力培养你,实习是很好的增加经验机会,因此不要轻易浪费实习机会,不要轻易去不对口的单位实习。那么在实习之前,我们应该怎么做呢?比如:我们将来要从事java方面的web开发,那么我们在学校课程中,就可以动手做一点有关web开发的实践项目,了解web开发的流程,大学期间,做过5个大小不同的项目,你的经验将截然不同。

 总结--可以依靠的是自己

相信自己是可以的,无论你出身无论你学校无论你的专业,珍惜大学时光,大学是最能决定自己前途的一段时光,这段时间你是自己的主宰,你唯一可以信赖的,就是自己。

最后祝愿所有的大学生们都能够成长为自己想要成为的那个人,学有所成。

想学编程知识,来【汉德学院】自学,上百种编程系统课程,上千个源码案例实操,各种免费公益课程正在开展。微信扫码开始学习。
收起阅读 »

学习编程首先要选准方向,然后跟着学习路径去走

【汉德学院】新版增加学习路径,有JAVA工程师学习路径,WEB前端工程师路径,Android研发工程师路径,让学习更有方向,更多开发工程师路径陆续发布中。
 

psb.jpg


psb_(1).jpg

 
【汉德学院】&【i码邦】都是为编程学习提供服务的平台,我们在不断努力,希望推出更有价值的平台。
 
微信扫描下方二维码,即可进入学习。

继续阅读 »
【汉德学院】新版增加学习路径,有JAVA工程师学习路径,WEB前端工程师路径,Android研发工程师路径,让学习更有方向,更多开发工程师路径陆续发布中。
 

psb.jpg


psb_(1).jpg

 
【汉德学院】&【i码邦】都是为编程学习提供服务的平台,我们在不断努力,希望推出更有价值的平台。
 
微信扫描下方二维码,即可进入学习。

收起阅读 »

纯小白学java、c等语言编程的正确打开方式


纯小白用户,要学编程,必须从自学开始,现在网络资源特别多,你可以寻找系统的课程,按照课程安排一章一章学习,并且完成作业,动手写点本章代码。 

这里推荐【汉德学院】,比如学习java编程,有完整的java基础课程体系,学完java初中高级课程,再去选择一个方向,android、web、大数据等,能力强者,可以自己选择项目实战,如果没条件做,可以去一些机构参加此类项目实践培训,或者去寻找开发企业的实习机会,跟具体项目走一圈即可。

其他语言学习同样,【汉德学院】都提供了从入门到精通的基础学习课程和源码案例。
 
开始跟着系统课程自学基础,遇到看不懂,可以找客服咨询,如果坚持3个月,仍困难重重,那么恭喜你,可以放弃这条路。这时候如果再去机构培训,就是白费功夫白花钱。

扫二维码直接进入汉德学院学习。(忠告:不是每个人都适合编程,不是每个人都可以编程)

收大一大二学生和想学编程并正在开始学习编程的,免费指导正确的学习方式,无论是java,c,c++,php,Python等等
继续阅读 »

纯小白用户,要学编程,必须从自学开始,现在网络资源特别多,你可以寻找系统的课程,按照课程安排一章一章学习,并且完成作业,动手写点本章代码。 

这里推荐【汉德学院】,比如学习java编程,有完整的java基础课程体系,学完java初中高级课程,再去选择一个方向,android、web、大数据等,能力强者,可以自己选择项目实战,如果没条件做,可以去一些机构参加此类项目实践培训,或者去寻找开发企业的实习机会,跟具体项目走一圈即可。

其他语言学习同样,【汉德学院】都提供了从入门到精通的基础学习课程和源码案例。
 
开始跟着系统课程自学基础,遇到看不懂,可以找客服咨询,如果坚持3个月,仍困难重重,那么恭喜你,可以放弃这条路。这时候如果再去机构培训,就是白费功夫白花钱。

扫二维码直接进入汉德学院学习。(忠告:不是每个人都适合编程,不是每个人都可以编程)

收大一大二学生和想学编程并正在开始学习编程的,免费指导正确的学习方式,无论是java,c,c++,php,Python等等
收起阅读 »

为什么你只能是码农,别人是软件工程师?

码农和软件工程师,都是程序员,都是写代码的人,有什么不同呢?


6.png


码农,我们只是代码的搬运工



为什么你们同一个学校同一个专业毕业,同样的课程同样的老师,结果大不同呢?


1.jpg


更心塞的还在后面



人生,从大学开始就开岔了!

第一步,你输在哪里?心里没数吗?

你进入大学以为万事大吉,人家进入大学明确方向努力奋斗;
你以为有个好专业混毕业就行,人家将专业作为基石让跳台更高;
所以
你在溜课打游戏时,人家在认真做笔记;
你在寝室睡懒觉时,人家在图书馆翻资料;
你在游戏厅嗨翻天时,人家在电脑上敲代码;
 


10.png

当你嗨的时候,别忘了形



第二步,你跟上了步骤,没跟对节拍

毕业前,招聘季
你求职四处碰壁,人家早被企业抢录;
实习期,离校前
你去培训只为有块敲门砖,人家为了增加经验更有能力;
 


7.png

你只具备了码农的修养



第三步,进入社会,划分阶层

你从跳槽到跳槽,追求的是更高一点的薪水,但还一直是码农;
人家一路升职,到资深工程师,早已财务自由;
你工作中越来越多瓶颈,不知道如何持续精进,
人家方向明确,从技术到管理,玩转IT各种技术;


5.png

你的苦逼因为你当年酷比



第四步,自己的路在哪里?

你学会了java、c++、Python等等各种语言;
你经历了金融、保险、医疗等等各种项目;
然并卵用,你还是会在35岁被淘汰。

悲惨的发现,当码农你都没资格!


大一大二学生看这里,想学编程和正在开始学习编程的,免费指导正确的学习方式,无论是java,c,c++,php,Python等等。

扫微信加入,免费指导

码农可以算是软件开发的最底层人员,也就是代码的生产者,就跟工厂的流水线工人一样,用谁都一样。

软件工程师,是兼具分析能力、设计能力、开发能力、解决复杂问题能力的综合人才,是项目的关键作用人。
继续阅读 »
码农和软件工程师,都是程序员,都是写代码的人,有什么不同呢?


6.png


码农,我们只是代码的搬运工



为什么你们同一个学校同一个专业毕业,同样的课程同样的老师,结果大不同呢?


1.jpg


更心塞的还在后面



人生,从大学开始就开岔了!

第一步,你输在哪里?心里没数吗?

你进入大学以为万事大吉,人家进入大学明确方向努力奋斗;
你以为有个好专业混毕业就行,人家将专业作为基石让跳台更高;
所以
你在溜课打游戏时,人家在认真做笔记;
你在寝室睡懒觉时,人家在图书馆翻资料;
你在游戏厅嗨翻天时,人家在电脑上敲代码;
 


10.png

当你嗨的时候,别忘了形



第二步,你跟上了步骤,没跟对节拍

毕业前,招聘季
你求职四处碰壁,人家早被企业抢录;
实习期,离校前
你去培训只为有块敲门砖,人家为了增加经验更有能力;
 


7.png

你只具备了码农的修养



第三步,进入社会,划分阶层

你从跳槽到跳槽,追求的是更高一点的薪水,但还一直是码农;
人家一路升职,到资深工程师,早已财务自由;
你工作中越来越多瓶颈,不知道如何持续精进,
人家方向明确,从技术到管理,玩转IT各种技术;


5.png

你的苦逼因为你当年酷比



第四步,自己的路在哪里?

你学会了java、c++、Python等等各种语言;
你经历了金融、保险、医疗等等各种项目;
然并卵用,你还是会在35岁被淘汰。

悲惨的发现,当码农你都没资格!


大一大二学生看这里,想学编程和正在开始学习编程的,免费指导正确的学习方式,无论是java,c,c++,php,Python等等。

扫微信加入,免费指导

码农可以算是软件开发的最底层人员,也就是代码的生产者,就跟工厂的流水线工人一样,用谁都一样。

软件工程师,是兼具分析能力、设计能力、开发能力、解决复杂问题能力的综合人才,是项目的关键作用人。
收起阅读 »

花2万去培训,真的能月薪上万吗?你身边有多少人入坑了(一)?

一入编程深似海,看你身边有哪些人着了这些道?

入坑者要小心~

0325.png



今天先说几个身边的特型案例,后面陆续分享更多普遍案例!

1、小A,重庆汽车生产车间一工人,初中毕业,不想总当工人,看到某培训机构宣传的0基础都可以学编程,而且包推荐工作,月薪可上万。一时心动,拿出全部积蓄近2万,开始了5个月的学习,毕业结束拿着培训机构统一包装的简历来求职,简历看起来能力真的不错,但是实际一面试,一问三不知,别说万元工资,想免费留在企业,都没人要。

0.png


2、小B,大专毕业,金融专业,多次去人才市场求职无果,一次被旁边一培训机构的人拉住,说培训3到5个月编程,开发android,可以月薪上万,包推荐工作,特别容易就业。小B刚毕业,没有积蓄,培训机构给办理了0元入学手续,学成毕业后,每月还款1千多,还款两年。小B学成毕业,被推荐到一个单位就业,从事android开发,但是所学知识太死板,不会解决问题,导致进度不能完成,两周后被公司辞退。身背贷款的他,进退两难。

0_(4).jpg





3、小C,一本重点大学,建筑专业,毕业后从事过许多工作,5年后去参加了5个月的JAVA编程培训,培训完,机构给推荐工作,均没有被录用,后来自己找到一家企业,学习能力是有,踏实程度也行,就是已经过了努力奋斗的年龄,尽头不足,也就是能再做10年左右的程序员,然后将面临求职更难的问题。

1.png



4、小D,30岁,三本大学互联网专业,学校开设了c、java等编程的基本课程,利用在校时间,参加了网络上系统的Java高级实战课程培训,实习期间去了软件开发企业参与了项目开发,毕业后因为经验和能力都优秀,顺利被软件企业录用。目前自己自主创业。
5、小E,重点大学,地理专业,毕业5年,大学期间就对编程感兴趣,经常泡图书馆看编程书籍,在网上关注各类IT技术,利用机会就写点程序,毕业后同学们都去当了老师,他依然北上,虽然没有系统的培训过哪门语言,但是他编程涉猎广泛,顺利应聘到一流软件公司,然后快速升级到项目经理。

2.png

 
最后小A彻底放弃编程,去当了快递员。小B兼职干着各种工作,还在进入程序员的求职路上。小C做的还是那点开发,但是不断的跳槽换公司,为了更多的薪水。小D实现财务自由、工作自由。小E已经是各大猎头的目标,年薪50万以上加各种奖金。

分享五个非专业人士入行编程的小故事,是个例也是范例,同样的人有很多很多,不同的人也有很多,还有更多入坑者将被分享,如果你身边有这样的朋友,请转发出去。

现在的生活已经离不开程序和程序员,如果你想了解他们,请关注我们。

发现真相,关注真相,你离坑就遥远!


想自我检测,综合评定,请扫下面二维码测评。

4.png


想自学编程、了解编程,从小程序【汉德学院】开始。

扫二维码即可进入

3x.png

 
继续阅读 »
一入编程深似海,看你身边有哪些人着了这些道?

入坑者要小心~

0325.png



今天先说几个身边的特型案例,后面陆续分享更多普遍案例!

1、小A,重庆汽车生产车间一工人,初中毕业,不想总当工人,看到某培训机构宣传的0基础都可以学编程,而且包推荐工作,月薪可上万。一时心动,拿出全部积蓄近2万,开始了5个月的学习,毕业结束拿着培训机构统一包装的简历来求职,简历看起来能力真的不错,但是实际一面试,一问三不知,别说万元工资,想免费留在企业,都没人要。

0.png


2、小B,大专毕业,金融专业,多次去人才市场求职无果,一次被旁边一培训机构的人拉住,说培训3到5个月编程,开发android,可以月薪上万,包推荐工作,特别容易就业。小B刚毕业,没有积蓄,培训机构给办理了0元入学手续,学成毕业后,每月还款1千多,还款两年。小B学成毕业,被推荐到一个单位就业,从事android开发,但是所学知识太死板,不会解决问题,导致进度不能完成,两周后被公司辞退。身背贷款的他,进退两难。

0_(4).jpg





3、小C,一本重点大学,建筑专业,毕业后从事过许多工作,5年后去参加了5个月的JAVA编程培训,培训完,机构给推荐工作,均没有被录用,后来自己找到一家企业,学习能力是有,踏实程度也行,就是已经过了努力奋斗的年龄,尽头不足,也就是能再做10年左右的程序员,然后将面临求职更难的问题。

1.png



4、小D,30岁,三本大学互联网专业,学校开设了c、java等编程的基本课程,利用在校时间,参加了网络上系统的Java高级实战课程培训,实习期间去了软件开发企业参与了项目开发,毕业后因为经验和能力都优秀,顺利被软件企业录用。目前自己自主创业。
5、小E,重点大学,地理专业,毕业5年,大学期间就对编程感兴趣,经常泡图书馆看编程书籍,在网上关注各类IT技术,利用机会就写点程序,毕业后同学们都去当了老师,他依然北上,虽然没有系统的培训过哪门语言,但是他编程涉猎广泛,顺利应聘到一流软件公司,然后快速升级到项目经理。

2.png

 
最后小A彻底放弃编程,去当了快递员。小B兼职干着各种工作,还在进入程序员的求职路上。小C做的还是那点开发,但是不断的跳槽换公司,为了更多的薪水。小D实现财务自由、工作自由。小E已经是各大猎头的目标,年薪50万以上加各种奖金。

分享五个非专业人士入行编程的小故事,是个例也是范例,同样的人有很多很多,不同的人也有很多,还有更多入坑者将被分享,如果你身边有这样的朋友,请转发出去。

现在的生活已经离不开程序和程序员,如果你想了解他们,请关注我们。

发现真相,关注真相,你离坑就遥远!


想自我检测,综合评定,请扫下面二维码测评。

4.png


想自学编程、了解编程,从小程序【汉德学院】开始。

扫二维码即可进入

3x.png

  收起阅读 »

小白学习java的正确姿态!

【i码邦】升级产品【汉德学院】,提供系统的java课程体系,
 

kc.png


如下为:java基础系统课程

2x.jpg


小白用户可以跟着这个课程章节按步骤学习
课程中的实例可以直接运行,

3x.jpg


学习中可以自己编辑修改源码案例,然后运行,

4x.jpg


还有java的中级和高级系统课程和源码案例,都可以在线学习。

微信扫描二维码直接进入【汉德学院】学习

完全小白用户,可以先到编程闯关游戏中,训练一下自己的编程思维和基本编程逻辑。
 
详见全民大挑战,有详细的闯关入门介绍。
继续阅读 »
【i码邦】升级产品【汉德学院】,提供系统的java课程体系,
 

kc.png


如下为:java基础系统课程

2x.jpg


小白用户可以跟着这个课程章节按步骤学习
课程中的实例可以直接运行,

3x.jpg


学习中可以自己编辑修改源码案例,然后运行,

4x.jpg


还有java的中级和高级系统课程和源码案例,都可以在线学习。

微信扫描二维码直接进入【汉德学院】学习

完全小白用户,可以先到编程闯关游戏中,训练一下自己的编程思维和基本编程逻辑。
 
详见全民大挑战,有详细的闯关入门介绍。 收起阅读 »

全民挑编程闯关战赛,挑战不可能

全民挑战赛,挑战不可能,寻找最奇特的你,发现最不可能的你,唯一条件,拒绝小学数学不及格

目前挑战赛记录,最小挑战者11岁,对,小学没毕业,最长挑战者70岁,女性家庭主妇。最无关职业挑战者,环卫工人。

挑战什么不可能?诗词,成语,no,太小儿科。我们挑战高精尖――编程游戏

是不是头大三倍?其实很easy,现在走开,你可能丧失了这辈子唯一一次接近编程的机会

不卖关子,5秒钟带你进入挑战赛现场。如果你经常玩游戏,请直接点本页右上角三个点,点击【回到首页】,直接进入闯关游戏开战!!

0.png


如果你对进入流程不熟悉,可以花几秒钟迅速浏览这里。
游戏场景】栏目是要实现的任务,【编程】栏目是可以操作的编程块,两个可以互相切换,编程块完成,可点击【游戏场景】中的运行程序,进行检测编程结果。

1、    目标:游戏场景,要实现的任务,下图,一个小人,要走到这条路的目标处。
 
image001.png


2、    切换到【编程】板块,一个编程块“向前移动”为该路径一半,因此执行两个,就可以实现该任务,这两个编程块必须顺序结合在一起,否则是两个独立的部分,互不相关。
 
image003.png


3、    【编程】完成,切换到【游戏场景】点击运行程序,执行你【编程】中的积木块,检测编程结果是否正确。

image005.png


4、    【编程】运行结果正确,生成对应的代码,是不是真的so easy?
 
image007.png


5、    确定,进入下一关了。(附后面两关说明)
第二关
  
image010.jpg
  
image011.png



第三关
  

image014.jpg


image015.png


扫码开始进行挑战吧,或者点击本页右上角三个点,回到首页开战。
 
image017.jpg


这里不挑战编程水平,只挑战编程思维。
未来世界离不开编程,开启它,可能只需要一个契机,一个平台。
分享一下,让身边更多人挑战自己的不可能。

如果你确实还不会,但是还很想更进一步,扫码加入下面的微信,手把手教你闯10关
 
微信2.jpg

 
继续阅读 »
全民挑战赛,挑战不可能,寻找最奇特的你,发现最不可能的你,唯一条件,拒绝小学数学不及格

目前挑战赛记录,最小挑战者11岁,对,小学没毕业,最长挑战者70岁,女性家庭主妇。最无关职业挑战者,环卫工人。

挑战什么不可能?诗词,成语,no,太小儿科。我们挑战高精尖――编程游戏

是不是头大三倍?其实很easy,现在走开,你可能丧失了这辈子唯一一次接近编程的机会

不卖关子,5秒钟带你进入挑战赛现场。如果你经常玩游戏,请直接点本页右上角三个点,点击【回到首页】,直接进入闯关游戏开战!!

0.png


如果你对进入流程不熟悉,可以花几秒钟迅速浏览这里。
游戏场景】栏目是要实现的任务,【编程】栏目是可以操作的编程块,两个可以互相切换,编程块完成,可点击【游戏场景】中的运行程序,进行检测编程结果。

1、    目标:游戏场景,要实现的任务,下图,一个小人,要走到这条路的目标处。
 
image001.png


2、    切换到【编程】板块,一个编程块“向前移动”为该路径一半,因此执行两个,就可以实现该任务,这两个编程块必须顺序结合在一起,否则是两个独立的部分,互不相关。
 
image003.png


3、    【编程】完成,切换到【游戏场景】点击运行程序,执行你【编程】中的积木块,检测编程结果是否正确。

image005.png


4、    【编程】运行结果正确,生成对应的代码,是不是真的so easy?
 
image007.png


5、    确定,进入下一关了。(附后面两关说明)
第二关
  
image010.jpg
  
image011.png



第三关
  

image014.jpg


image015.png


扫码开始进行挑战吧,或者点击本页右上角三个点,回到首页开战。
 
image017.jpg


这里不挑战编程水平,只挑战编程思维。
未来世界离不开编程,开启它,可能只需要一个契机,一个平台。
分享一下,让身边更多人挑战自己的不可能。

如果你确实还不会,但是还很想更进一步,扫码加入下面的微信,手把手教你闯10关
 
微信2.jpg

  收起阅读 »

【i码邦】升级产品--汉德学院发布(编程语言支持更全面,教材更系统)

2018全新启程,【i码邦】全新升级产品——汉德学院正式发布。

5a93bd0baa83d.gif

 
微信扫描下面二维码即可进入,无需下载、注册、登陆,直接开始课程学习。

微信图片_20180226222001.jpg


  
更加全面的编程课程体系——提供java,c++,c,php,js,python等编程语言的从入门到精通系统化课程体系。
1x.jpg

 
更加便捷的自学编程方式——课程中案例可直接进行编辑、编译、运行处理,随学随用,学以致用,学习效率提高。

3x.jpg

 
更加全方位的编程知识——发现栏目提供编程每日头条文章,了解IT行业最近技术动态,掌握更多编程实用技巧。
 

6x.jpg

 
更轻松的编程学习方式——提供编程游戏闯关,在游戏中学习编程思维,

5x.jpg

 
更轻松分享给好友——无论分享文章还是源码,每个新朋友点击即可获得一积分,一积分=1元人民币,可以抵扣课费。

7x.jpg
继续阅读 »
2018全新启程,【i码邦】全新升级产品——汉德学院正式发布。

5a93bd0baa83d.gif

 
微信扫描下面二维码即可进入,无需下载、注册、登陆,直接开始课程学习。

微信图片_20180226222001.jpg


  
更加全面的编程课程体系——提供java,c++,c,php,js,python等编程语言的从入门到精通系统化课程体系。
1x.jpg

 
更加便捷的自学编程方式——课程中案例可直接进行编辑、编译、运行处理,随学随用,学以致用,学习效率提高。

3x.jpg

 
更加全方位的编程知识——发现栏目提供编程每日头条文章,了解IT行业最近技术动态,掌握更多编程实用技巧。
 

6x.jpg

 
更轻松的编程学习方式——提供编程游戏闯关,在游戏中学习编程思维,

5x.jpg

 
更轻松分享给好友——无论分享文章还是源码,每个新朋友点击即可获得一积分,一积分=1元人民币,可以抵扣课费。

7x.jpg
收起阅读 »

零基础学Java如何成为代码高手

编程不是请客吃饭,不是描画绣花,不能那样儒雅,那样闲庭信步,那样从容不迫。Java编程是一门技术,一门进行创造的技术。

绝大多数计算机专业的学生是零基础,其中不乏被调剂的。等到毕业之际,有的成了大神,进入BAT或者google微软,有的还是零基础……但零基础并不可怕,只有找对方向,就一定会成功,下面分享从零基础学Java编程迈向代码高手。

1.最重要的是学会写程序

C语言也好,python也好,你得学会把自己的思考用程序实现。举个例子,你想制定计划表,安排自己的时间,那这个问题就可以写个程序来实现;你想做笔记、管理自己的文件,这也是一个程序。从简单的、直接的几行十几行程序开始,比如计算器;到复杂的小工具,比如大数计算器。这个过程中你逐渐明白数组、指针、内存布局、函数,了解递归、栈、链表,然后学基本的数据结构。之后再写程序,你需要考虑代码的优雅、简单、时间空间效率高,使用什么样的方式来实现最好。最后你学会了复用,学会了调用系统API,学会了想什么就能用代码实现什么或者知道它不能被实现,你就学会了编程。

2. 不要灰心,不要迷茫,要有毅力

你才学了半年,和周围所谓的大牛比是没有意义的。而且编程这东西,个人感觉是入门可能会有困难,但是随着接触到的越多,进步会越来越快的。所以你难道没有发现你的巨大潜力吗?每个大牛也都是从牛犊子开始成长的。

3. 关于编程语言

语言只是工具,没有具体的好与不好,只有合适不合适,喜欢不喜欢。

4. 关于读书

有条件的话最好看国外的原版书或者中文翻译,网上很多pdf格式可以下载的。

5. 关于写代码

写代码是基本功,代码写不好的,嘴上说多牛逼,多半是瞎扯淡。

6. 关于总结

总结记录,加深记忆,方便以后查看。多进行总结记录也会起到不错的效果。

寄语:

成为高手之前,需要经历很多的打磨以及磨砺,不要只看见前面高手人前多牛逼,忽略背后苦逼的努力。不疯魔不成佛,加油吧,小伙伴
 
继续阅读 »
编程不是请客吃饭,不是描画绣花,不能那样儒雅,那样闲庭信步,那样从容不迫。Java编程是一门技术,一门进行创造的技术。

绝大多数计算机专业的学生是零基础,其中不乏被调剂的。等到毕业之际,有的成了大神,进入BAT或者google微软,有的还是零基础……但零基础并不可怕,只有找对方向,就一定会成功,下面分享从零基础学Java编程迈向代码高手。

1.最重要的是学会写程序

C语言也好,python也好,你得学会把自己的思考用程序实现。举个例子,你想制定计划表,安排自己的时间,那这个问题就可以写个程序来实现;你想做笔记、管理自己的文件,这也是一个程序。从简单的、直接的几行十几行程序开始,比如计算器;到复杂的小工具,比如大数计算器。这个过程中你逐渐明白数组、指针、内存布局、函数,了解递归、栈、链表,然后学基本的数据结构。之后再写程序,你需要考虑代码的优雅、简单、时间空间效率高,使用什么样的方式来实现最好。最后你学会了复用,学会了调用系统API,学会了想什么就能用代码实现什么或者知道它不能被实现,你就学会了编程。

2. 不要灰心,不要迷茫,要有毅力

你才学了半年,和周围所谓的大牛比是没有意义的。而且编程这东西,个人感觉是入门可能会有困难,但是随着接触到的越多,进步会越来越快的。所以你难道没有发现你的巨大潜力吗?每个大牛也都是从牛犊子开始成长的。

3. 关于编程语言

语言只是工具,没有具体的好与不好,只有合适不合适,喜欢不喜欢。

4. 关于读书

有条件的话最好看国外的原版书或者中文翻译,网上很多pdf格式可以下载的。

5. 关于写代码

写代码是基本功,代码写不好的,嘴上说多牛逼,多半是瞎扯淡。

6. 关于总结

总结记录,加深记忆,方便以后查看。多进行总结记录也会起到不错的效果。

寄语:

成为高手之前,需要经历很多的打磨以及磨砺,不要只看见前面高手人前多牛逼,忽略背后苦逼的努力。不疯魔不成佛,加油吧,小伙伴
 
收起阅读 »

Java基础之走进JAVA!

1、JAVA的跨平台性

比如我现在以游戏开发者的身份,要使用某一种编程语言编写一套游戏软件,为了能在不同平台都能玩该游戏,我得为每一种平台制作一份可执行文件,这样就非常的麻烦了,对于每一个平台都有着自己独特的语言开发环境,所以一个程序是不可以在其他平台上面运行的,要实现在不同的平台上面运行,应该在各个平台的电脑上装上模拟器,让跨平台的文件运行在模拟器里.


7.png


2、JDK-JRE-JVM

JRE(Java Runtime Environment):Java运行环境,如果要运行Java程序,就需要JRE的支持,JRE里包含JVM。

JDK(Java Development Kit):Java开发工具,包含开发Java程序的所有工具,如javac和java等,JDK里包含JRE。

JVM是Java语言的运行环境就是一个java模拟机

所以在开发的过程中我们只需要安装JDK就行了,对于新版本的JDK我们在配置环境变量的时候,可以不用再去配置classpath,JRE会自动搜索当前路径下的jar包,并自动加载dt.jar和tools.jar。直接配置path就可以了。

3、第一个java程序

8.png



注意:只要类被public修饰,类名就必须要和保存的文件名一样,包括字母的大小写都要相同,保存的文件名后缀为.Java。

4、Java基本语法:

1):Java语言严格区分大小写,好比main和Main是完全不同的概念。

2):一个Java源文件里可以定义多个Java类,但其中最多只能有一个类被定义成public类。若源文件中包括了public类,源文件必须和该public类同名。

3):一个源文件中包含N个Java类时,编译后会生成N份字节码文件,即每个类都会生成一份单独的class文件,且字节码文件名和其对应的类名相同。

4):一个类必须拥有main方法才能运行,因为main方法是程序的入口.

编程建议:

一个Java源文件只定义一个类,不同的类使用不同的源文件定义;

将每个源文件中单独定义的类都定义成public的;

保持Java源文件的主文件名与源文件中的类名一致;

5、Java的三大注释:

Java的注释信息是给程序员看的,编译器(javac)在编译的时候会忽略掉源文件中的注释信息。

为此,Java提供3种注释类型:

① 单行注释;

单行注释://;//注释信息,从//开始到本行结束的所有字符会被编译器忽略;

② 多行注释;

多行注释:/ /;/注释信息/之间的所有字符会被编译器忽略

③ 文档注释;

文档注释:/* /;/*注释信息/和多行注释一样,除此之外还可以专门生成文档信息API。在讲面向对象的javadoc时详述。

注意:多行注释和文档注释之间彼此都不能交叉嵌套.

6、Java语言分隔符:

分号(;):语句的分割,表示一句话结束,好比咱们使用的句号。

花括号({}):表示一个代码块,是一个整体,花括号要成对使用。

方括号([]):定义数组和访问数组元素时使用。

圆括号(()):使用很广泛,具体用到细讲。

圆点(.):类和对象访问它的成员时使用。

空格( ):把一整条语句分割成几段,空格的次数不限制,好比一句英文里单词都要分开写一样。

注意:必须都是半角下的英文符号。

中文的:,,,,,,

半角:,

全角:,

在写代码的时候为了增强代码的阅读性会自定义很多名字,比如:类名,方法名,变量名等。

在编程的里我们把这种为了增强程序阅读性而自定义的名称,称为标识符。

7、标识符命名规则:

① 由字母、数字、下划线、$组成,但不能以数字开头(注:此处的字母可以是中文、日文等)。

② 大小写敏感。

③ 不得使用java中的关键字和保留字。

④ 不用Java API里的类名作为自己的类名。

其实,大家也没必要记这么多,使用一个非关键字和保留字的有意义的英文单词就很OK了。

规范:类名首字母要大写.
继续阅读 »
1、JAVA的跨平台性

比如我现在以游戏开发者的身份,要使用某一种编程语言编写一套游戏软件,为了能在不同平台都能玩该游戏,我得为每一种平台制作一份可执行文件,这样就非常的麻烦了,对于每一个平台都有着自己独特的语言开发环境,所以一个程序是不可以在其他平台上面运行的,要实现在不同的平台上面运行,应该在各个平台的电脑上装上模拟器,让跨平台的文件运行在模拟器里.


7.png


2、JDK-JRE-JVM

JRE(Java Runtime Environment):Java运行环境,如果要运行Java程序,就需要JRE的支持,JRE里包含JVM。

JDK(Java Development Kit):Java开发工具,包含开发Java程序的所有工具,如javac和java等,JDK里包含JRE。

JVM是Java语言的运行环境就是一个java模拟机

所以在开发的过程中我们只需要安装JDK就行了,对于新版本的JDK我们在配置环境变量的时候,可以不用再去配置classpath,JRE会自动搜索当前路径下的jar包,并自动加载dt.jar和tools.jar。直接配置path就可以了。

3、第一个java程序

8.png



注意:只要类被public修饰,类名就必须要和保存的文件名一样,包括字母的大小写都要相同,保存的文件名后缀为.Java。

4、Java基本语法:

1):Java语言严格区分大小写,好比main和Main是完全不同的概念。

2):一个Java源文件里可以定义多个Java类,但其中最多只能有一个类被定义成public类。若源文件中包括了public类,源文件必须和该public类同名。

3):一个源文件中包含N个Java类时,编译后会生成N份字节码文件,即每个类都会生成一份单独的class文件,且字节码文件名和其对应的类名相同。

4):一个类必须拥有main方法才能运行,因为main方法是程序的入口.

编程建议:

一个Java源文件只定义一个类,不同的类使用不同的源文件定义;

将每个源文件中单独定义的类都定义成public的;

保持Java源文件的主文件名与源文件中的类名一致;

5、Java的三大注释:

Java的注释信息是给程序员看的,编译器(javac)在编译的时候会忽略掉源文件中的注释信息。

为此,Java提供3种注释类型:

① 单行注释;

单行注释://;//注释信息,从//开始到本行结束的所有字符会被编译器忽略;

② 多行注释;

多行注释:/ /;/注释信息/之间的所有字符会被编译器忽略

③ 文档注释;

文档注释:/* /;/*注释信息/和多行注释一样,除此之外还可以专门生成文档信息API。在讲面向对象的javadoc时详述。

注意:多行注释和文档注释之间彼此都不能交叉嵌套.

6、Java语言分隔符:

分号(;):语句的分割,表示一句话结束,好比咱们使用的句号。

花括号({}):表示一个代码块,是一个整体,花括号要成对使用。

方括号([]):定义数组和访问数组元素时使用。

圆括号(()):使用很广泛,具体用到细讲。

圆点(.):类和对象访问它的成员时使用。

空格( ):把一整条语句分割成几段,空格的次数不限制,好比一句英文里单词都要分开写一样。

注意:必须都是半角下的英文符号。

中文的:,,,,,,

半角:,

全角:,

在写代码的时候为了增强代码的阅读性会自定义很多名字,比如:类名,方法名,变量名等。

在编程的里我们把这种为了增强程序阅读性而自定义的名称,称为标识符。

7、标识符命名规则:

① 由字母、数字、下划线、$组成,但不能以数字开头(注:此处的字母可以是中文、日文等)。

② 大小写敏感。

③ 不得使用java中的关键字和保留字。

④ 不用Java API里的类名作为自己的类名。

其实,大家也没必要记这么多,使用一个非关键字和保留字的有意义的英文单词就很OK了。

规范:类名首字母要大写. 收起阅读 »

一张图告诉你:Java编程所需的工具及知识

学习编程,学习java编程,并不是仅仅会写java代码那么简单,要做到大牛,你需要了解和掌握下面的所有知识。
 
万事开头难,java学习从javaSE开始,一点一滴积累,要想走的更远,需要其他更多知识的学习和应用。

14.png

 
继续阅读 »
学习编程,学习java编程,并不是仅仅会写java代码那么简单,要做到大牛,你需要了解和掌握下面的所有知识。
 
万事开头难,java学习从javaSE开始,一点一滴积累,要想走的更远,需要其他更多知识的学习和应用。

14.png

 
收起阅读 »

8年经验前辈分享程序员职业规划-Java学习


导读
 在中国有很多人都认为IT行业是吃青春饭的,如果过了30岁就很难有机会再发展下去!其实现实并不是这样子的。一位从事 .NET 及 JAVA 方面的开发有8年的时间的前辈,在这里分享自己的亲身经历,与大家一起探讨一下。

明确入选的目的

很多人干IT这一行都冲着“收入高”这一点的,因为只要学会一点HTML、DIV+CSS。
要做一个页面开发人员并不是一件难事,而且做一个页面开发人员更容易找到工作,收入比普通的工作还要高一些,所以成为了很多高校毕业生的选择。
如果您只是抱着这样一个心态来入行的话,那阁下可真的要小心。

因为干IT这一行竞争本来就比较激烈,特别是页面设计这方面,能够开发的人很多;

所以为了节省成本在大部分公司都会在需要的时候才招聘这类人员,在没有订单的时候一些小公司还可能找各类的借口或者以降薪的手段去开除这类员工。

而在招聘信息上常常会看到“招聘页面设计师,条件:30岁以下……欢迎应界毕业生前来应聘”这样一条;

因为这一类工员对技术上的要求并不高,找应界生可以节约成本。

所以在下觉得“IT行业是吃青春饭的”这句话只是对着以上这类人所说的。

如果阁下缺乏“进取之心”,而只抱着“收入高,容易找工作”这样的态度而入行,那“IT行业是吃青春饭”将会应验了。

选择合适的工具

JAVA、C#、PHP、C++、VB……10多种热门的开发语言,哪一种最有发展潜力呢?

其实开发语言只不过是一个工具,“与其分散进攻,不如全力一击”,无论是哪一种开发语言,只要您全力地去学习,到有了一定的熟悉程度的时候,要学习另一种的语言也是轻而易举的事情。

开发语言主要分为三大类:
  1. 网络开发:现在网络已经成为世界通讯的一座桥梁,好像 Javascript、PHP、Ruby 这几类开发语言大部分是用作网络开发方面
  2. 企业软件开发:JAVA、C#、VB 这几类开发语言都实现了面向对象开发的目标,更多时候用于企业系统的开发
  3. 系统软件:C 语言、C++、Object-C 这些软件更多是用在系统软件开发,嵌入式开发的方面。当然,这分类不是绝对,像 JAVA、C#、VB 很多时候也用于动态网站的开发。


在很开发项目都会使用集成开发的方式,同一个项目里面使用多种开发语言,各展所长,同步开发。

但所以在刚入门的时候,建议您先为自己选择一种合适的开发工具,“专注地投入学习,全力一击”。

明确发展方向

当您对某种开发语言已经有了一定的了解,开始觉得自己如同“行尸走肉”,成为一个开发工具的时候,那您就应该要明确一下自己的发展方向了。

平常在公司,您可以看到做 UI 层的开发人员大多数都有20多岁,他们充满干劲,而且没有家庭负担。

在几年前 ASP.NET MVC 、Silverlight 等刚出现的时候,他们可以在晚上回家的时候买几本书或者直接上网看看,研究三五个星期以后,对需要用到技术就已经有一定的了解了。

而年过30的人多数是已经成了家了,他们每天9:00点上班唯一的希望就是快些到6:00点,能回家吃饭。

吃完饭只想陪孩子玩一下,看看孩子的功课,对新增的技术缺乏了学习的欲望。

所以很多接近30岁的程序员都有着一种逼迫感(包括30岁时候的我自己),再过几年应该怎么办?

这时候,您就更应该明确一下目标,努力向自己的发展方向前进了。

归纳一下,可从下面几项里选择适合自己的一条道路:

01从技术向业务过渡

在国外,很多发达国家都很重视人才,一个高级的程序员与一个 Project Manager 收入相差一般不超过15%。
但中国是世界上人口最多的国家,国内人才众多,所以人才滥用的情况经常可以看到。
一个小公司的开发部里面经常会见到新面孔,但PM却不会常换。
因为做老板的对技术是一窍不通,依他们看来只到拉住 PM 的心,那技术方面方面就能搞得定,至于技术部要换人,他们根本不需要费力气去管。
所以从一个技术员过渡到一个 PM 是一条向前发展的一个选择,但开发人员也需要知道,要成为一个 PM 不单单是使用技术,而更重要的是对管理方面认识。
一个PM主要的工作是组织团队,控制成本,管理业务,控制项目进度,与客户进行沟通,协调工作,定期进行工作报告等。

要成为一个成功的 PM 更要重视组织能力,PM 必须能提高团队的积极性,发挥团队所长,在有限的开发资源前提下为公司得到最大程度上的利润。

成为一个 PM 后,通常不需要直接接触技术开发,而着重管理的是业务发展,但 PM 对技术也需要有一定的了解。

在这里我还是要强调自己的观点:

要成为一个成功 PM 最重视的是管理能力,但对技术也应该有足够的了解;

因为这是与团队成员沟通的桥梁,只有这样才能与整个团队的成员有着紧密的结合,让团队成员感觉到他们自己存在的意义,从而调动团队的积极性,而不是漠视技术人员的存在。

技术并非成为一个成功 PM 的充分条件但却是必要条件!

02从程序员向技术管理发展

其实一个 Team Leader 的职责与 Project Manager 相像,但 Team Leader 更着重于技术开发方面,通常一个大型项目都会有一两个开发团队由 Team Leader 带领,负责开发核心部分,而其它部分分派给不同开发小组或者分派给外包公司。

03单方面向技术发展

能成功技术开发的尖端人才,这是在下最向往的工作,却也没本事登上这个位置。
很多从事开发的人都会认为,业务总会带着“金钱的味道”,老板从来不管开发是否合符开发原则,有否经过必要测试,他们只会在客户面前无尽地吹嘘,项目到期能成功交货,只要不出什么大问题那这个项目就算成功了。

确定未来的目标

人是从历练中成长的,古人云:三十而立,形容的不是一个人的社会地位,经济来源,而是形容一个人对未来的目标,对人生的意向。
要成为一个成功人,就应该早日为自己定下长期的发展目标,作为一个开发者也当如此。
随着人的性格,取向各有不同,大家为自己所选择的路也有不同:
  • 01自立门户,勇敢创业

快30岁了,很多人会认为要想真正赚得了钱,就应该自立门户,为自己创业建立一个基础。
像北京、上海、广州这些一级城市,要买房子,一手楼基本要在 2万~4万元/平方米左右。
而在一家普通的 IT 公司当上一个项目经理,基本收入一般都在1.5万~3万之间(除非在大型的跨国企业内工作,那另当别论)。
要买一间100平方米左右的房子,就算不吃不喝也几乎要10年的年薪。
所以选择自主创业,是很多 IT 开发人员的一个未来目标,想要达到这个目标,就应该更多地把业务作为重点。
不可否认的一件事,在中国社会里很多时候讲的是“关系”,即使这几十年的改革开放使中国的经济蓬勃地发展起来,但几千年来留下的歪风还是不能完全的磨灭。
所以想要创业的人事建议你要多跟客户打好关系,与合作伙伴保持互利互动的模式,这将有利于日后事业的发展。
  • 02急流勇退,退居二线

这也是不少人的选择。
很多人在有了家庭以后,感觉到压力太大,人的一生并非只有事业,他们想把更多时间用于对亲人的照顾,对孩子的关心上。
所以很多人会选择一份像系统分析、系统维护、高校教师、专业学院讲师这一类的工作。
收入稳定,而且往往没有一线开发人员那么大的压力。
  • 03不懈努力,更进一步

无论你是一个 Project Manager 或者是 Team Leader,如果你想继续晋升一级,那还是会两极分化的。
从一个 PM 到一间公司的管理层,那所面对的事件会有很多变化。
一个公司的总经理,要管理的不再是一到两个项目的成本,而是整个部门的运作,整间公司的业务流程,所以要肩负的任务的会更重。
在下曾经有一位上司彭博士,他是企业的最高领导人,年薪超过三百万,而且在报纸杂志上也曾经亮过相。
平常只会在某些会议上轻轻地亮下相,说两句讲词,平常的公司运作与业务管理都不需要他直接执行。
这并不是说一个作为管理层很清闲,因为他们要面对的是更多的社会关系,与公司合作企业的联系上。
这跟一个 PM 的工作的很大的区别,所以要从一个 PM 晋升到管理层,那可是要负出更多的努力与汗水。
如果要从 Team Leader 上升为一个技术总监,那工作的方向也有所改变。
像之前所说:一个 TL 可能更重视的是技术层面,讲求与团队之间的互动合作性,更注重的是开发的完善。
而一个技术总监就无需要直接参加某个项目的开发,而注意的是开发的效率与成果,如何合理使用有限的开发资源,控制开发的风险和可能带来的效果。

发展感受

经历了8年多时间,在下从一个程序员到一个项目经理,之间经过很多的曲折,但因为每一个人的际遇都有所不同,所走的路也有不同。
正所谓条条大路通罗马,成功的路不止一条,在下也不想令各位误解,而只想为大家说一下我的发展方向。
如果您是一位开发人员
程序员->架构师-> Team Leader (Project Manager)->技术总监
是一条不错路,这也是在下选择的路。

在我国,想要进一步提升自己,无论你想是以技术为重点还是以业务为重点,都离不开管理二字。
在一些大型的企业,一个团队往往会配备一个 PM 与一个架构师,尽管两个人负责的任务各有不同,
但你会看到一个架构师的收入往往不如一个 PM,PM 往往是这个团队的核心领导者,是关键人物。
因为公司能否赚钱,PM 有着重要的作用。
PM 与 TL 并没有绝对的区别,而且在一些中小型企业,一个开发团队只有3~5人,一个 TL 往往会兼备业务处理、成本控件、架构设计、开发管理等多项任务。
所以在下会把 Team Leader 与 Project Manager 定于同一层次,一个公司的老板往往不会知道团队的架构师、程序员是何人,
而只会向 PM 询问项目的进度,所以只有晋升到这个层次,才有机会进一步提升管理能力,让自己有上升的空间。
置于要成为一个技术总监,那要求就不再单单是对单个项目的管理,而应该更则重于新兴技术的引用,开发资源的合理利用,对开发项目敏捷性的处理等等,对此在下也在试探当中,未敢多言。

继续阅读 »

导读
 在中国有很多人都认为IT行业是吃青春饭的,如果过了30岁就很难有机会再发展下去!其实现实并不是这样子的。一位从事 .NET 及 JAVA 方面的开发有8年的时间的前辈,在这里分享自己的亲身经历,与大家一起探讨一下。

明确入选的目的

很多人干IT这一行都冲着“收入高”这一点的,因为只要学会一点HTML、DIV+CSS。
要做一个页面开发人员并不是一件难事,而且做一个页面开发人员更容易找到工作,收入比普通的工作还要高一些,所以成为了很多高校毕业生的选择。
如果您只是抱着这样一个心态来入行的话,那阁下可真的要小心。

因为干IT这一行竞争本来就比较激烈,特别是页面设计这方面,能够开发的人很多;

所以为了节省成本在大部分公司都会在需要的时候才招聘这类人员,在没有订单的时候一些小公司还可能找各类的借口或者以降薪的手段去开除这类员工。

而在招聘信息上常常会看到“招聘页面设计师,条件:30岁以下……欢迎应界毕业生前来应聘”这样一条;

因为这一类工员对技术上的要求并不高,找应界生可以节约成本。

所以在下觉得“IT行业是吃青春饭的”这句话只是对着以上这类人所说的。

如果阁下缺乏“进取之心”,而只抱着“收入高,容易找工作”这样的态度而入行,那“IT行业是吃青春饭”将会应验了。

选择合适的工具

JAVA、C#、PHP、C++、VB……10多种热门的开发语言,哪一种最有发展潜力呢?

其实开发语言只不过是一个工具,“与其分散进攻,不如全力一击”,无论是哪一种开发语言,只要您全力地去学习,到有了一定的熟悉程度的时候,要学习另一种的语言也是轻而易举的事情。

开发语言主要分为三大类:
  1. 网络开发:现在网络已经成为世界通讯的一座桥梁,好像 Javascript、PHP、Ruby 这几类开发语言大部分是用作网络开发方面
  2. 企业软件开发:JAVA、C#、VB 这几类开发语言都实现了面向对象开发的目标,更多时候用于企业系统的开发
  3. 系统软件:C 语言、C++、Object-C 这些软件更多是用在系统软件开发,嵌入式开发的方面。当然,这分类不是绝对,像 JAVA、C#、VB 很多时候也用于动态网站的开发。


在很开发项目都会使用集成开发的方式,同一个项目里面使用多种开发语言,各展所长,同步开发。

但所以在刚入门的时候,建议您先为自己选择一种合适的开发工具,“专注地投入学习,全力一击”。

明确发展方向

当您对某种开发语言已经有了一定的了解,开始觉得自己如同“行尸走肉”,成为一个开发工具的时候,那您就应该要明确一下自己的发展方向了。

平常在公司,您可以看到做 UI 层的开发人员大多数都有20多岁,他们充满干劲,而且没有家庭负担。

在几年前 ASP.NET MVC 、Silverlight 等刚出现的时候,他们可以在晚上回家的时候买几本书或者直接上网看看,研究三五个星期以后,对需要用到技术就已经有一定的了解了。

而年过30的人多数是已经成了家了,他们每天9:00点上班唯一的希望就是快些到6:00点,能回家吃饭。

吃完饭只想陪孩子玩一下,看看孩子的功课,对新增的技术缺乏了学习的欲望。

所以很多接近30岁的程序员都有着一种逼迫感(包括30岁时候的我自己),再过几年应该怎么办?

这时候,您就更应该明确一下目标,努力向自己的发展方向前进了。

归纳一下,可从下面几项里选择适合自己的一条道路:

01从技术向业务过渡

在国外,很多发达国家都很重视人才,一个高级的程序员与一个 Project Manager 收入相差一般不超过15%。
但中国是世界上人口最多的国家,国内人才众多,所以人才滥用的情况经常可以看到。
一个小公司的开发部里面经常会见到新面孔,但PM却不会常换。
因为做老板的对技术是一窍不通,依他们看来只到拉住 PM 的心,那技术方面方面就能搞得定,至于技术部要换人,他们根本不需要费力气去管。
所以从一个技术员过渡到一个 PM 是一条向前发展的一个选择,但开发人员也需要知道,要成为一个 PM 不单单是使用技术,而更重要的是对管理方面认识。
一个PM主要的工作是组织团队,控制成本,管理业务,控制项目进度,与客户进行沟通,协调工作,定期进行工作报告等。

要成为一个成功的 PM 更要重视组织能力,PM 必须能提高团队的积极性,发挥团队所长,在有限的开发资源前提下为公司得到最大程度上的利润。

成为一个 PM 后,通常不需要直接接触技术开发,而着重管理的是业务发展,但 PM 对技术也需要有一定的了解。

在这里我还是要强调自己的观点:

要成为一个成功 PM 最重视的是管理能力,但对技术也应该有足够的了解;

因为这是与团队成员沟通的桥梁,只有这样才能与整个团队的成员有着紧密的结合,让团队成员感觉到他们自己存在的意义,从而调动团队的积极性,而不是漠视技术人员的存在。

技术并非成为一个成功 PM 的充分条件但却是必要条件!

02从程序员向技术管理发展

其实一个 Team Leader 的职责与 Project Manager 相像,但 Team Leader 更着重于技术开发方面,通常一个大型项目都会有一两个开发团队由 Team Leader 带领,负责开发核心部分,而其它部分分派给不同开发小组或者分派给外包公司。

03单方面向技术发展

能成功技术开发的尖端人才,这是在下最向往的工作,却也没本事登上这个位置。
很多从事开发的人都会认为,业务总会带着“金钱的味道”,老板从来不管开发是否合符开发原则,有否经过必要测试,他们只会在客户面前无尽地吹嘘,项目到期能成功交货,只要不出什么大问题那这个项目就算成功了。

确定未来的目标

人是从历练中成长的,古人云:三十而立,形容的不是一个人的社会地位,经济来源,而是形容一个人对未来的目标,对人生的意向。
要成为一个成功人,就应该早日为自己定下长期的发展目标,作为一个开发者也当如此。
随着人的性格,取向各有不同,大家为自己所选择的路也有不同:
  • 01自立门户,勇敢创业

快30岁了,很多人会认为要想真正赚得了钱,就应该自立门户,为自己创业建立一个基础。
像北京、上海、广州这些一级城市,要买房子,一手楼基本要在 2万~4万元/平方米左右。
而在一家普通的 IT 公司当上一个项目经理,基本收入一般都在1.5万~3万之间(除非在大型的跨国企业内工作,那另当别论)。
要买一间100平方米左右的房子,就算不吃不喝也几乎要10年的年薪。
所以选择自主创业,是很多 IT 开发人员的一个未来目标,想要达到这个目标,就应该更多地把业务作为重点。
不可否认的一件事,在中国社会里很多时候讲的是“关系”,即使这几十年的改革开放使中国的经济蓬勃地发展起来,但几千年来留下的歪风还是不能完全的磨灭。
所以想要创业的人事建议你要多跟客户打好关系,与合作伙伴保持互利互动的模式,这将有利于日后事业的发展。
  • 02急流勇退,退居二线

这也是不少人的选择。
很多人在有了家庭以后,感觉到压力太大,人的一生并非只有事业,他们想把更多时间用于对亲人的照顾,对孩子的关心上。
所以很多人会选择一份像系统分析、系统维护、高校教师、专业学院讲师这一类的工作。
收入稳定,而且往往没有一线开发人员那么大的压力。
  • 03不懈努力,更进一步

无论你是一个 Project Manager 或者是 Team Leader,如果你想继续晋升一级,那还是会两极分化的。
从一个 PM 到一间公司的管理层,那所面对的事件会有很多变化。
一个公司的总经理,要管理的不再是一到两个项目的成本,而是整个部门的运作,整间公司的业务流程,所以要肩负的任务的会更重。
在下曾经有一位上司彭博士,他是企业的最高领导人,年薪超过三百万,而且在报纸杂志上也曾经亮过相。
平常只会在某些会议上轻轻地亮下相,说两句讲词,平常的公司运作与业务管理都不需要他直接执行。
这并不是说一个作为管理层很清闲,因为他们要面对的是更多的社会关系,与公司合作企业的联系上。
这跟一个 PM 的工作的很大的区别,所以要从一个 PM 晋升到管理层,那可是要负出更多的努力与汗水。
如果要从 Team Leader 上升为一个技术总监,那工作的方向也有所改变。
像之前所说:一个 TL 可能更重视的是技术层面,讲求与团队之间的互动合作性,更注重的是开发的完善。
而一个技术总监就无需要直接参加某个项目的开发,而注意的是开发的效率与成果,如何合理使用有限的开发资源,控制开发的风险和可能带来的效果。

发展感受

经历了8年多时间,在下从一个程序员到一个项目经理,之间经过很多的曲折,但因为每一个人的际遇都有所不同,所走的路也有不同。
正所谓条条大路通罗马,成功的路不止一条,在下也不想令各位误解,而只想为大家说一下我的发展方向。
如果您是一位开发人员
程序员->架构师-> Team Leader (Project Manager)->技术总监
是一条不错路,这也是在下选择的路。

在我国,想要进一步提升自己,无论你想是以技术为重点还是以业务为重点,都离不开管理二字。
在一些大型的企业,一个团队往往会配备一个 PM 与一个架构师,尽管两个人负责的任务各有不同,
但你会看到一个架构师的收入往往不如一个 PM,PM 往往是这个团队的核心领导者,是关键人物。
因为公司能否赚钱,PM 有着重要的作用。
PM 与 TL 并没有绝对的区别,而且在一些中小型企业,一个开发团队只有3~5人,一个 TL 往往会兼备业务处理、成本控件、架构设计、开发管理等多项任务。
所以在下会把 Team Leader 与 Project Manager 定于同一层次,一个公司的老板往往不会知道团队的架构师、程序员是何人,
而只会向 PM 询问项目的进度,所以只有晋升到这个层次,才有机会进一步提升管理能力,让自己有上升的空间。
置于要成为一个技术总监,那要求就不再单单是对单个项目的管理,而应该更则重于新兴技术的引用,开发资源的合理利用,对开发项目敏捷性的处理等等,对此在下也在试探当中,未敢多言。

收起阅读 »

想自学 Java 月入过万?这几个项目会做了再说吧

前言
Java 语言已有20年左右的历史,但从市场上的招聘现状看,Java 程序员依然有着其他语言不可取代的竞争优势。
对于很多朋友来说,Java 是迈入编程行业的“第一课”。
 
但是很多自学的朋友没有很系统的学习,这里哪里吸收一些知识,盲目的学习,也不知道自己学的怎么样了?

假如你学习了完 Java 的基础知识,之后需要一些小项目去帮我们复习检测一下自己学习的基础知识点和提高一下编程能力,这样会对一些小的工程有一个大致的了解,有助于以后一步一步的接触比较大的项目。

所以现在给新手小伙伴们推荐一些练手的项目,后续还会继续做一些小项目制作思路的文章。

适合新手练手的 Java 项目有哪些?

一.各种管理系统
例如《宿舍管理系统》
项目简介:
1.管理系统包括人员信息的查询、维护,实现管理人员与学生的互动。
2.实现宿舍管理人员进行学生信息的录入和修改,外来来访人员的登记。
3.学生可以通过此系统及时进行宿舍情况的反馈,方便管理人员及时了解所出现的问题并及时进行处理。

二.简易的聊天系统
项目简介:
1.实现登陆和注册功能
2.实现一对一聊天和多人聊天

三.简单的游戏

《2048》
《俄罗斯方块》
这个两个游戏就不用我介绍了吧!

最后说一句:
我们做项目之前要先写好我们的需求分析,比如一个系统你要弄清楚他的业务逻辑,以及一些项目需求,功能模块。

再比如像游戏你要先弄清楚游洗规则。

我们要注意一些细节性的东西,比如数据类型类型之间的转换,程序写一个功能调试一个功能别全部的代码写完了,一运行报了很多错,像经验少的根本不知道从哪个地方去找问题。记住一点别挖坑埋自己。
 
继续阅读 »
前言
Java 语言已有20年左右的历史,但从市场上的招聘现状看,Java 程序员依然有着其他语言不可取代的竞争优势。
对于很多朋友来说,Java 是迈入编程行业的“第一课”。
 
但是很多自学的朋友没有很系统的学习,这里哪里吸收一些知识,盲目的学习,也不知道自己学的怎么样了?

假如你学习了完 Java 的基础知识,之后需要一些小项目去帮我们复习检测一下自己学习的基础知识点和提高一下编程能力,这样会对一些小的工程有一个大致的了解,有助于以后一步一步的接触比较大的项目。

所以现在给新手小伙伴们推荐一些练手的项目,后续还会继续做一些小项目制作思路的文章。

适合新手练手的 Java 项目有哪些?

一.各种管理系统
例如《宿舍管理系统》
项目简介:
1.管理系统包括人员信息的查询、维护,实现管理人员与学生的互动。
2.实现宿舍管理人员进行学生信息的录入和修改,外来来访人员的登记。
3.学生可以通过此系统及时进行宿舍情况的反馈,方便管理人员及时了解所出现的问题并及时进行处理。

二.简易的聊天系统
项目简介:
1.实现登陆和注册功能
2.实现一对一聊天和多人聊天

三.简单的游戏

《2048》
《俄罗斯方块》
这个两个游戏就不用我介绍了吧!

最后说一句:
我们做项目之前要先写好我们的需求分析,比如一个系统你要弄清楚他的业务逻辑,以及一些项目需求,功能模块。

再比如像游戏你要先弄清楚游洗规则。

我们要注意一些细节性的东西,比如数据类型类型之间的转换,程序写一个功能调试一个功能别全部的代码写完了,一运行报了很多错,像经验少的根本不知道从哪个地方去找问题。记住一点别挖坑埋自己。
 
收起阅读 »

现在学java编程晚吗?好找工作吗?

Java 语言是一门随时代快速发展的计算机语言程序,其深刻展示了程序编写的精髓,加上其简明严谨的结构及简洁的语法编写为其将来的发展及维护提供了保障。


 
Java语言,经久不衰,为时不晚
 
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程,摘星教育认为,到目前为止,或在未来很长的一段时间,没有任何一种编程语言能撼动期霸主的地位。Java编程经久不衰,现在学习不算晚。

10.png

 
Java编程好找工作吗?
 
在所有软件开发类人才的需求中,对Java工程师的需求达到全部需求量的60%~70%。我国目前对软件人才的需求已达20万,并且以每年20%左右的速度增长。据了解,全球有25亿Java器件运行着Java,450多万Java开发者活跃在地球的每个角落,数以千万计的Web用户每次上网都亲历Java的威力。
 
11.png

 
继续阅读 »

Java 语言是一门随时代快速发展的计算机语言程序,其深刻展示了程序编写的精髓,加上其简明严谨的结构及简洁的语法编写为其将来的发展及维护提供了保障。


 
Java语言,经久不衰,为时不晚
 
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程,摘星教育认为,到目前为止,或在未来很长的一段时间,没有任何一种编程语言能撼动期霸主的地位。Java编程经久不衰,现在学习不算晚。

10.png

 
Java编程好找工作吗?
 
在所有软件开发类人才的需求中,对Java工程师的需求达到全部需求量的60%~70%。我国目前对软件人才的需求已达20万,并且以每年20%左右的速度增长。据了解,全球有25亿Java器件运行着Java,450多万Java开发者活跃在地球的每个角落,数以千万计的Web用户每次上网都亲历Java的威力。
 
11.png

 
收起阅读 »

老猿分享:Java找工作经验心得

作为一名Java开发人员找到工作不难,但适合自己的工作就太不容易了,找工作面试是关键性的一步。面试是一个双向选择的过程,双方都是平等的,一个需,一个求。很简单,很多时候不必看得那么重,只要把自己的心态放平,在面试之时,也就不会那么的紧张和不安。虽然说了一大堆话,但是面试时,自己的能力也是非常重要的,面试只是通过一个门,如果在公司工作时,你没有能力。你也不会在那家公司待很长时间。下面为java找工作心得体验分享。
 

banner-4.jpg

 
java找工作心得体验分享面试方法:

 简历,是你的第一印象,成功的第一步,好的简历更能让你打开成功之门。

JAVA基础,基础一定要比较扎实,搞程序的必要条件(推荐程序员面试宝典和Thinkinjava2版,最后找些算法题目:二叉树,排序...)。

项目经历,赢得成功的筹码和保障,自己做的项目一定要非常清楚和熟悉。

再有一个很重要的一点,那就是自信.还有就是'会吹'。当然不是要你胡乱瞎编一通,'吹'是建立在'会'的基础之上的。有时候,当你面对面试官的时候,不需要太紧张,也不需要过多的考虑。他会问你哪些技术性的问题。一个人力资源的经理跟我说:当他面试人的时候,其实他也不知道问题的答案,只是看回答这个问题的人,逻辑性好不好,语言表达能力好不好,还有就是自不自信,有这三点.基本上可以确定这个人无论在技术上还是在心理素质上都会不错。
 
 java找工作心得体验分享最新JAVA面试题:


 1.简要介绍java程序的健壮性。
答:JAVA程序会在编译和运行的时候自动的检测可能出现的错误,而且它是一种强类型语言,对于类型的检查很严格,而且它的垃圾回收机制也有效的避免了内存的泄漏。

2.为什么说java语言是完全面向对象的?(其实我觉得它不是完全面向对象的)
答:因为它不支持任何面向过程的程序设计技术它的所有程序设计技术都是用类来实现的。
另答:因为它有8种简单数据类型不是面向对象的,可以直接使用它,用static申明的变量或方法不是面向对象的,因为它不属于任何一个对象,要调用它可以直接使用,不用对它进行实例化(这种方法还在争论中)。

3.简要介绍java如何实现安全性。
答:首先JAVA删除了指针这就避免了非法的内存操作,所有对内存的操作都必须通过对象的实例来实现。而且当我们从网上下载代码执行是它的安全系统能确保恶意程序不会随便访问我们本地计算机的资源。

4.为什么说java是解释性的?
答:因为我们在执行JAVA文件时,编译器会先把代码译成字节码文件,这是一种中间代码,然后JAVA解释器才进行执行。

5.简要介绍java的平台无关性。
答:JAVA程序是在虚拟机上执行的,只要安装了JAVA虚拟机它就可以以字节码的形式在任何平台上执行。

6.简要介绍java的多态性。
答:多态性是指同名的不同方法在程序中共存,系统根据不同的情况调用不同的方法实现不同的功能。实现多态性的方法有两种:覆盖实现,重载实现。

7.简要介绍java是强类型检查语言。
答:JAVA对数据类型的检查非常严格,在定义和用变量时必须先指定其类型而且它只允许数据类型的向上提升,而且不允许出现会出现数据丢失的附值(如把小数附给整形)。

8.int 和 Integer有什么区别?
答:int是简单数据类型(整形)而Integer是整形的封装类。

9.简要介绍String和StringBuffer的区别?
答:String类代表不可变字符串。在值创建之后就不能被改变。而StringBuffer是可变的字符序列,初始容量16字节,通过某些方法可改变其内容和长度。

10.简要介绍java的垃圾回收机制。
答:JAVA的垃圾回收机制就是:当一个对象没有任何引用时,该对象便会启动垃圾回收器调用finalize方法以配置系统资源或执行相关的清除操作。 java找工作心得体验分享之压轴内容一位JAVA HR的旁白:
 


经验多的希望有一些深度或者广度的积累。比如说某些领域非常专注/专业,或者说在整体上有非常全面的认识和了解。工作时间长了就需要有一定的积累,不然怎么能够突出自己的特点呢?做互联网的就需要对性能、并发、分布式等专业领域有一些了解或者研究,哪怕有一些心得也不错。做企业开发的就需要对行业、稳定性、工具、理论等有些独有的理解,哪怕很初级、幼稚也行。具体点怎么说,比如你每天都是用struts/spring/hibernate/ibatis等等,那么对这些原理是否了解?背后的思想是否了解?

业界的认识和评测、比较是否了解?而不是仅仅知道怎么调用API,这远远不够。如果能够研究下源码,写一个类似的系统就更好了。说白了就是能够透过工具/技术本身发现一些规律或者说认识,剩下来的就是积累,也就是我们通常说的经验。还有一个方面就是对行业趋势的了解。技术不能够仅仅关注于技术本身,还需要对业绩的动态、趋势有些关注,这样才能不至于技术不断的更新而落后。这并不是说总是去追求新技术、新软件、新工具等,而是关注行业本身的发展。

另外还有一个很重要的经验积累,那就是解决问题的能力。很多同学同时觉得自己做了很多事情,但是让他说一两点比较突出的事情,就说不出来了,总是归结于事情本身比较简单,没有更多的发现和挖掘。其实有时候面试的人只需要了解当初解决问题的过程就行,从中发现个人在里面做了什么、怎么做、收获了什么。这就是经验的积累。企业归根结底是需要员工作做贡献的,因此需要有经验的人来帮助解决问题,那么曾经解决问题的能力和思路就很重要了。

对于没有多少经验的同学,比如刚毕业或者实习生等,那么就需要基础很好,然后有一些个人的认识。这些经验少的java同学一般面试者都不会为难他们,只需要把知道的、认识到的告诉面试者就行了,从而让面试者能够看到发展的潜力。很多人还是喜欢培养那些有发展潜力的同学,这些同学的进步都是非常迅速的。我个人总结其实只有一点,那就是要有“亮点”。说白了就是有自己独特的认识和理解等才能在众多差不多的同学中脱颖而出。既然不能做全才,那么就做“专才”。这些java找工作心得体验分享希望能助你找到一份好工作。总之,面试时技能是基础,表达是辅助。是块金子,在哪里都会放出光彩!
 
继续阅读 »
作为一名Java开发人员找到工作不难,但适合自己的工作就太不容易了,找工作面试是关键性的一步。面试是一个双向选择的过程,双方都是平等的,一个需,一个求。很简单,很多时候不必看得那么重,只要把自己的心态放平,在面试之时,也就不会那么的紧张和不安。虽然说了一大堆话,但是面试时,自己的能力也是非常重要的,面试只是通过一个门,如果在公司工作时,你没有能力。你也不会在那家公司待很长时间。下面为java找工作心得体验分享。
 

banner-4.jpg

 
java找工作心得体验分享面试方法:

 简历,是你的第一印象,成功的第一步,好的简历更能让你打开成功之门。

JAVA基础,基础一定要比较扎实,搞程序的必要条件(推荐程序员面试宝典和Thinkinjava2版,最后找些算法题目:二叉树,排序...)。

项目经历,赢得成功的筹码和保障,自己做的项目一定要非常清楚和熟悉。

再有一个很重要的一点,那就是自信.还有就是'会吹'。当然不是要你胡乱瞎编一通,'吹'是建立在'会'的基础之上的。有时候,当你面对面试官的时候,不需要太紧张,也不需要过多的考虑。他会问你哪些技术性的问题。一个人力资源的经理跟我说:当他面试人的时候,其实他也不知道问题的答案,只是看回答这个问题的人,逻辑性好不好,语言表达能力好不好,还有就是自不自信,有这三点.基本上可以确定这个人无论在技术上还是在心理素质上都会不错。
 
 java找工作心得体验分享最新JAVA面试题:


 1.简要介绍java程序的健壮性。
答:JAVA程序会在编译和运行的时候自动的检测可能出现的错误,而且它是一种强类型语言,对于类型的检查很严格,而且它的垃圾回收机制也有效的避免了内存的泄漏。

2.为什么说java语言是完全面向对象的?(其实我觉得它不是完全面向对象的)
答:因为它不支持任何面向过程的程序设计技术它的所有程序设计技术都是用类来实现的。
另答:因为它有8种简单数据类型不是面向对象的,可以直接使用它,用static申明的变量或方法不是面向对象的,因为它不属于任何一个对象,要调用它可以直接使用,不用对它进行实例化(这种方法还在争论中)。

3.简要介绍java如何实现安全性。
答:首先JAVA删除了指针这就避免了非法的内存操作,所有对内存的操作都必须通过对象的实例来实现。而且当我们从网上下载代码执行是它的安全系统能确保恶意程序不会随便访问我们本地计算机的资源。

4.为什么说java是解释性的?
答:因为我们在执行JAVA文件时,编译器会先把代码译成字节码文件,这是一种中间代码,然后JAVA解释器才进行执行。

5.简要介绍java的平台无关性。
答:JAVA程序是在虚拟机上执行的,只要安装了JAVA虚拟机它就可以以字节码的形式在任何平台上执行。

6.简要介绍java的多态性。
答:多态性是指同名的不同方法在程序中共存,系统根据不同的情况调用不同的方法实现不同的功能。实现多态性的方法有两种:覆盖实现,重载实现。

7.简要介绍java是强类型检查语言。
答:JAVA对数据类型的检查非常严格,在定义和用变量时必须先指定其类型而且它只允许数据类型的向上提升,而且不允许出现会出现数据丢失的附值(如把小数附给整形)。

8.int 和 Integer有什么区别?
答:int是简单数据类型(整形)而Integer是整形的封装类。

9.简要介绍String和StringBuffer的区别?
答:String类代表不可变字符串。在值创建之后就不能被改变。而StringBuffer是可变的字符序列,初始容量16字节,通过某些方法可改变其内容和长度。

10.简要介绍java的垃圾回收机制。
答:JAVA的垃圾回收机制就是:当一个对象没有任何引用时,该对象便会启动垃圾回收器调用finalize方法以配置系统资源或执行相关的清除操作。 java找工作心得体验分享之压轴内容一位JAVA HR的旁白:
 


经验多的希望有一些深度或者广度的积累。比如说某些领域非常专注/专业,或者说在整体上有非常全面的认识和了解。工作时间长了就需要有一定的积累,不然怎么能够突出自己的特点呢?做互联网的就需要对性能、并发、分布式等专业领域有一些了解或者研究,哪怕有一些心得也不错。做企业开发的就需要对行业、稳定性、工具、理论等有些独有的理解,哪怕很初级、幼稚也行。具体点怎么说,比如你每天都是用struts/spring/hibernate/ibatis等等,那么对这些原理是否了解?背后的思想是否了解?

业界的认识和评测、比较是否了解?而不是仅仅知道怎么调用API,这远远不够。如果能够研究下源码,写一个类似的系统就更好了。说白了就是能够透过工具/技术本身发现一些规律或者说认识,剩下来的就是积累,也就是我们通常说的经验。还有一个方面就是对行业趋势的了解。技术不能够仅仅关注于技术本身,还需要对业绩的动态、趋势有些关注,这样才能不至于技术不断的更新而落后。这并不是说总是去追求新技术、新软件、新工具等,而是关注行业本身的发展。

另外还有一个很重要的经验积累,那就是解决问题的能力。很多同学同时觉得自己做了很多事情,但是让他说一两点比较突出的事情,就说不出来了,总是归结于事情本身比较简单,没有更多的发现和挖掘。其实有时候面试的人只需要了解当初解决问题的过程就行,从中发现个人在里面做了什么、怎么做、收获了什么。这就是经验的积累。企业归根结底是需要员工作做贡献的,因此需要有经验的人来帮助解决问题,那么曾经解决问题的能力和思路就很重要了。

对于没有多少经验的同学,比如刚毕业或者实习生等,那么就需要基础很好,然后有一些个人的认识。这些经验少的java同学一般面试者都不会为难他们,只需要把知道的、认识到的告诉面试者就行了,从而让面试者能够看到发展的潜力。很多人还是喜欢培养那些有发展潜力的同学,这些同学的进步都是非常迅速的。我个人总结其实只有一点,那就是要有“亮点”。说白了就是有自己独特的认识和理解等才能在众多差不多的同学中脱颖而出。既然不能做全才,那么就做“专才”。这些java找工作心得体验分享希望能助你找到一份好工作。总之,面试时技能是基础,表达是辅助。是块金子,在哪里都会放出光彩!
 
收起阅读 »

写给初学者:编程的本质

俗话说,开卷有益, 前几天又翻了下《计算机程序的构造和解释》,看到一个采用牛顿法求平方根的例子,产生了点新的感想,和大家分享下。

平方根的数学定义是这样的,对于一个数x , 如果有另外一个数r,  r大于等于0 ,并且r 的平方等于x , 那 r 就是 x的平方根。

这个定义描述了平方根的一般性事实,但是这是一个声明性的描述,并没有告诉我们一个具体的计算过程。 假设我们要写一个程序,给定一个数x , 怎么求得它的平方根呢?


banner-2.jpg


初学者可能会觉得, 我可以写个这样的程序啊:


square_root( x ){

    找到一个r ,确保 r的平方等于 x

    返回r

}



但是这个函数一点用都没有,只不过把原来的问题给重新描述了一遍而已。

如果有一个这样的编程语言,程序员会非常高兴: 我们可以用声明性的方式来写程序了!只需要告诉计算机说,找到一个r ,使得r的平方等于输入x 即可。

但是在当前的计算机体系下面, 这是绝对不可能的,计算机是个笨家伙,它只能按照人类的告诉他的指令一步步的工作, 它突出的优势只是运行得比较快而已。

程序员必须要告诉计算机到底该怎么做,怎么去找到那个r, 第一步怎么做,第二步怎么做。。。。。什么时候结束。

针对于求平方根的例子, 程序员需要找到一个算法,然后把这个算法的步骤和计算过程用计算机语言描述出来,形成计算机指令。


banner-on2.jpg


这个计算过程大概长这个样子:

先猜测r = 1 , 判断r 的平方和x 是不是非常接近(例如相差0.0001)

如果不接近,让 r = (r+x/r) / 2, 继续判断r的平方 与 x 是不是非常接近

如果不接近, 继续让 r = (r+x/r)/2 。。。。。

对于 x =2 , 其计算过程如下:

很明显,这是一个逐渐逼近的过程,计算的次数越多,越逼近真正的平方根。

改写为编程语言描述:

请暂停阅读10秒钟, 仔细体会上述的计算过程,它和之前声明性描述有什么区别。

一个描述平方根是什么, 另外一个描述求平方根计算机具体怎么做。

无论多么复杂的程序,无论的前端之王javascript , 还是后端的java ,无论是面向过程的还是面向对象的,最终的做的同样的事情:把用户描述的需求(通常是声明式的)变成计算机可以理解,可以运算的步骤。

“是什么” 和 “怎么做”之间有着巨大的鸿沟,这个鸿沟就需要程序员的大脑去填补。 求平方根是个非常单纯的例子,已经有数学家们想好了具体的计算办法, 程序员翻译一下,变成计算机语言就行。

现实中这样的好事儿是不多的, 比如说你们公司要搞个社交化的促销: 用户连续x天转发某个活动到朋友圈就可以获得奖品, 转发的有效时间是早上9点至晚上10点, 同一天转发多次只算一次。

在实现上你首先得记录用户什么时间转发的,然后对转发时间排个序,过滤掉那些无效的转发,计算这些用户的转发时间没有连续性, 连续的天数到了指定的数值没有。 ---  这就不存在现成的算法,程序员需要自己想出计算的步骤,然后用代码实现。

可以看出,这不需要高深的数学知识,就是找到一个合适的算法和数据结构来描述它,这是编程最最基本的能力。

对于小白来说, 通过自学和培训,可能很快学会一个语言的使用, 可是基本能力不加强,早晚要吃亏的。最突出的表现是给他一个很简单的业务,他花了很长时间才写出一个漏洞百出的版本。


随着业务越来越复杂,一个领域的问题会和其他领域的问题交织纠缠在一起,让复杂度大大增加,简单的一个或几个算法和数据结构是搞不定的,  这时候必须得用一些辅助的手段才能解决,比如使用封装、分层、模式、分布式等等, 这是属于另外一个维度的设计能力了, 这种能力和编程语言都没有关系。

初学者完全可以先学会编程语言和框架,先具备工作能力,然后必须加强数据结构和算法的训练,随着经验的积累,慢慢地扩展到设计和架构层面。
 
继续阅读 »
俗话说,开卷有益, 前几天又翻了下《计算机程序的构造和解释》,看到一个采用牛顿法求平方根的例子,产生了点新的感想,和大家分享下。

平方根的数学定义是这样的,对于一个数x , 如果有另外一个数r,  r大于等于0 ,并且r 的平方等于x , 那 r 就是 x的平方根。

这个定义描述了平方根的一般性事实,但是这是一个声明性的描述,并没有告诉我们一个具体的计算过程。 假设我们要写一个程序,给定一个数x , 怎么求得它的平方根呢?


banner-2.jpg


初学者可能会觉得, 我可以写个这样的程序啊:


square_root( x ){

    找到一个r ,确保 r的平方等于 x

    返回r

}



但是这个函数一点用都没有,只不过把原来的问题给重新描述了一遍而已。

如果有一个这样的编程语言,程序员会非常高兴: 我们可以用声明性的方式来写程序了!只需要告诉计算机说,找到一个r ,使得r的平方等于输入x 即可。

但是在当前的计算机体系下面, 这是绝对不可能的,计算机是个笨家伙,它只能按照人类的告诉他的指令一步步的工作, 它突出的优势只是运行得比较快而已。

程序员必须要告诉计算机到底该怎么做,怎么去找到那个r, 第一步怎么做,第二步怎么做。。。。。什么时候结束。

针对于求平方根的例子, 程序员需要找到一个算法,然后把这个算法的步骤和计算过程用计算机语言描述出来,形成计算机指令。


banner-on2.jpg


这个计算过程大概长这个样子:

先猜测r = 1 , 判断r 的平方和x 是不是非常接近(例如相差0.0001)

如果不接近,让 r = (r+x/r) / 2, 继续判断r的平方 与 x 是不是非常接近

如果不接近, 继续让 r = (r+x/r)/2 。。。。。

对于 x =2 , 其计算过程如下:

很明显,这是一个逐渐逼近的过程,计算的次数越多,越逼近真正的平方根。

改写为编程语言描述:

请暂停阅读10秒钟, 仔细体会上述的计算过程,它和之前声明性描述有什么区别。

一个描述平方根是什么, 另外一个描述求平方根计算机具体怎么做。

无论多么复杂的程序,无论的前端之王javascript , 还是后端的java ,无论是面向过程的还是面向对象的,最终的做的同样的事情:把用户描述的需求(通常是声明式的)变成计算机可以理解,可以运算的步骤。

“是什么” 和 “怎么做”之间有着巨大的鸿沟,这个鸿沟就需要程序员的大脑去填补。 求平方根是个非常单纯的例子,已经有数学家们想好了具体的计算办法, 程序员翻译一下,变成计算机语言就行。

现实中这样的好事儿是不多的, 比如说你们公司要搞个社交化的促销: 用户连续x天转发某个活动到朋友圈就可以获得奖品, 转发的有效时间是早上9点至晚上10点, 同一天转发多次只算一次。

在实现上你首先得记录用户什么时间转发的,然后对转发时间排个序,过滤掉那些无效的转发,计算这些用户的转发时间没有连续性, 连续的天数到了指定的数值没有。 ---  这就不存在现成的算法,程序员需要自己想出计算的步骤,然后用代码实现。

可以看出,这不需要高深的数学知识,就是找到一个合适的算法和数据结构来描述它,这是编程最最基本的能力。

对于小白来说, 通过自学和培训,可能很快学会一个语言的使用, 可是基本能力不加强,早晚要吃亏的。最突出的表现是给他一个很简单的业务,他花了很长时间才写出一个漏洞百出的版本。


随着业务越来越复杂,一个领域的问题会和其他领域的问题交织纠缠在一起,让复杂度大大增加,简单的一个或几个算法和数据结构是搞不定的,  这时候必须得用一些辅助的手段才能解决,比如使用封装、分层、模式、分布式等等, 这是属于另外一个维度的设计能力了, 这种能力和编程语言都没有关系。

初学者完全可以先学会编程语言和框架,先具备工作能力,然后必须加强数据结构和算法的训练,随着经验的积累,慢慢地扩展到设计和架构层面。
 
收起阅读 »

Java Web和Java后端开发的学习路线

基础:比如计算机系统、算法、编译原理等等 


Web开发: 主要是Web开发相关的内容,包括HTML/CSS/JS(前端页面)、Servlet/JSP(J2EE)以及MySQL(数据库)相关的知识。它们的学习顺序应该是从前到后,因此最先学习的应该是HTML/CSS/JS(前端页面),这部分内容你可以去上面的那个runoob网站上找。

J2EE:你需要学习的是Servlet/JSP(J2EE)部分,这部分是Java后端开发必须非常精通的部分,因此这部分是这三部分中最需要花精力的。关于Servlet/Jsp部分视频的选择,业界比较认可马士兵的视频 。

最后一步,你需要学会使用数据库,mysql是个不错的入门选择,而且Java领域里主流的关系型数据库就是mysql。这部分一般在你学习Servlet/Jsp的时候,就会接触到的,其中的JDBC部分就是数据库相关的部分。你不仅要学会使用JDBC操作数据库,还要学会使用数据库客户端工具,比如navicat,sqlyog,二选一即可。

 开发框架:目前比较主流的是SSM框架,即spring、springmvc、mybatis。你需要学会这三个框架的搭建,并用它们做出一个简单的增删改查的Web项目。你可以不理解那些配置都是什么含义,以及为什么要这么做,这些留着后面你去了解。但你一定要可以快速的利用它们三个搭建出一个Web框架,你可以记录下你第一次搭建的过程,相信我,你一定会用到的。还要提一句的是,你在搭建SSM的过程中,可能会经常接触到一个叫maven的工具。这个工具也是你以后工作当中几乎是必须要使用的工具,所以你在搭建SSM的过程中,也可以顺便了解一下maven的知识。在你目前这个阶段,你只需要在网络上了解一下maven基本的使用方法即可,一些高端的用法随着你工作经验的增加,会逐渐接触到的。


 在这一年里,你至少需要看完《Java编程思想》这本书。这本书的内容是帮助你对于Java有一个更加深入的了解,是Java基础的升级版。 总而言之,这个阶段的核心学习思想就是,在工作中实践,并且更加深入的了解Java基础。

 对于参加工作1年到2年的同学。这部分时间段的同学,已经对Java有了一个更加深入的了解。但是对于面向对象的体会可能还不够深刻,编程的时候还停留在完成功能的层次,很少会去考虑设计的问题。于是这个时候,设计模式就来了。我当时看的是《大话设计模式》这本书,并且写了完整版的设计模式博客。因此,我要求大家,最多在你工作一年的时候,必须开始写博客,而设计模式就是你博客的开端。

此外,设计模式并不是你这一年唯一的任务,你还需要看一些关于代码编写优化的书。比如《重构 改善既有代码的设计》,《effective java》。总而言之,这个阶段,你的核心任务就是提高你的代码能力,要能写出一手优雅的代码。

对于参加工作2年到3年的同学有的同学在这个时候觉得自己已经很牛逼了,于是忍不住开始慢慢松懈。请记住,你还嫩的多。这个阶段,有一本书是你必须看的,它叫做《深入理解Java虚拟机》。这本书绝对是Java开发者最重要的书,没有之一。在我眼里,这本书的重要性还要高于《Java编程思想》。这本书的内容是帮助你全面的了解Java虚拟机,在这个阶段,你一定已经知道Java是运行在JVM之上的。所以,对于JVM,你没有任何理由不了解它。

这个时候,你应该去更加深入的了解并发相关的知识,而这部分内容,我比较推荐《Java并发编程实战》这本书。只要你把这本书啃下来了,并发的部分基本已经了解了十之六七。与此同时,这个阶段你要做的事情还远不止如此。这个时候,你应该对于你所使用的框架应该有了更深入的了解,对于Java的类库也有了更深入的了解。




因此,你需要去看一些JDK中的类的源码,也包括你所使用的框架的源码。这些源码能看懂的前提是,你必须对设计模式非常了解。否则的话,你看源码的过程中,永远会有这样那样的疑问,这段代码为什么要这么写?为什么要定义这个接口,它看起来好像很多余?由此也可以看出,这些学习的过程是环环相扣的,如果你任何一个阶段拉下来了,那么你就真的跟不上了,或者说是一步慢步步慢。而且我很负责的告诉你,我在这个阶段的时候,所学习的东西远多于这里所罗列出来的。




总而言之,这个阶段,你需要做的是深入了解Java底层和Java类库(比如并发那本书就是Java并发包java.concurrent的内容),也就是JVM和JDK的相关内容。而且还要更深入的去了解你所使用的框架,方式比较推荐看源码或者看官方文档。另外,还有一种学习的方式,在2年这个阶段,也应该启用了,那就是造轮子。不要听信那套“不要重复造轮子”的论调,那是公司为了节省时间成本编造出来的。重复造轮子或许对别人没有价值,因为你造的轮子可能早就有了,而且一般情况下你造出来的轮子还没有现存的好。

但是对别人没有价值,不代表对你自己没有价值。一个造轮子的过程,是一个从无到有的过程。这个过程可以对你进行系统的锻炼,它不仅考察你的编码能力,还考察你的框架设计能力,你需要让你的轮子拥有足够好的扩展性、健壮性。而且在造轮子的过程中,你会遇到各种各样的难题,这些难题往往又是你学习的契机。当你把轮子造好的时候,你一定会发现,其实你自己收获了很多。所以,这个阶段,除了上面提到的了解JVM、JDK和框架源码以外,也请你根据别人优秀的源码,去造一个任何你能够想象出来的轮子。第四部分:参加工作3年到4年的同学这个阶段的同学,提升已经是很难了,而且这个阶段的学习往往会比较多样化。因为在前3年的过程中,你肯定或多或少接触过一些其它的技术,比如大数据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等等。这些技术,你能精通任何一项,都将是你未来面试时巨大的优势,因此如果你对某一项技术感兴趣的话,这个时候可以深入去研究一下。这项技术不一定是你工作所用到的,但一定是相关的。而且在研究一门新技术时,切忌朝三暮四。有的同学今天去整整大数据,搞搞Hadoop、hbase一类的东西。过不了一段时间,就觉得没意思,又去研究分布式缓存,比如redis。然后又过不了一段时间,又去研究分布式计算,比如整整Mapreduce或者storm。结果到最后,搞得自己好像什么都会一样,在简历上大言不惭的写上大数据、分布式缓存、分布式计算都了解,其实任何一个都只是浮于表面。到时候面试官随便一问,就把你给识破了。我比较推崇的基础书籍有三本,分别是《深入理解计算机系统》,《tcp/ip详解 卷一、二、三》,《数据结构与算法》。其中TCP/IP有三本书,但我们这里把这三本看成是一本大书。这三本分别适合三种人,《深入理解计算机系统》比较适合一直从事Java Web开发和APP后端开发工作的人群。《tcp/ip详解 卷一、二、三》比较适合做网络编程的人群,比如你使用netty去开发的话,那么就要对TCP/IP有更深入的了解。而《数据结构与算法》这本书,则比较适合做计算研究工作的人,比如刚才提到的分布式计算。另外,我要强调的是,这里所说的适合,并不是其它两本对你就没有用。比如你做Java Web和APP后端开发,《tcp/ip详解 卷一、二、三》这本书对你的作用也是很大的。这里只是分出个主次关系而已,你要是时间足够的话,能把三本都精读那当然最好不过了。第五部分:参加工作4年到5年的同学经过前面一年的历练,相信你在自己所钻研的领域已经有了自己一定的见解,这个时候,技术上你应该已经遇到瓶颈了。这个时候不要着急提高自己的技术,已经是时候提高你的影响力了,你可以尝试去一些知名的公司去提高你的背景,你可以发表一些文章去影响更多的人。当然,你也可以去Github创建一个属于你的开源项目,去打造自己的产品。

这次的开源项目不同于之前的造轮子,你这个时候是真的要去尽量尝试造出来真正对别人有价值的轮子。技术学到这个阶段,很容易遇到瓶颈,而且往往达到一定程度后,你再深入下去的收效就真的微乎其微了,除非你是专门搞学术研究的。然而很可惜,大部分程序猿做不到这一步,那是科学家做的事情。这个时候提高影响力不仅仅是因为技术上容易遇到瓶颈,更多的是影响力可以给你创造更多的机会。程序猿在某种程度上和明星很像,一个好的电视剧和电影就可以成就一批明星,程序猿有的时候也是,一个好的项目就可以成就一群程序猿。比如国内几个脍炙人口的项目,像淘宝、支付宝、QQ、百度、微信等等。这每一个项目,都成就了一批程序猿。我敢说,这里面任何一个项目,如果你是它的核心开发,光是这样一个Title,就已经是你非常大的优势。更何况还不止如此,Title说到底也是个名头,更重要的是,这种项目在做的时候,对你的历练一定也是非常给力的。
 
继续阅读 »
基础:比如计算机系统、算法、编译原理等等 


Web开发: 主要是Web开发相关的内容,包括HTML/CSS/JS(前端页面)、Servlet/JSP(J2EE)以及MySQL(数据库)相关的知识。它们的学习顺序应该是从前到后,因此最先学习的应该是HTML/CSS/JS(前端页面),这部分内容你可以去上面的那个runoob网站上找。

J2EE:你需要学习的是Servlet/JSP(J2EE)部分,这部分是Java后端开发必须非常精通的部分,因此这部分是这三部分中最需要花精力的。关于Servlet/Jsp部分视频的选择,业界比较认可马士兵的视频 。

最后一步,你需要学会使用数据库,mysql是个不错的入门选择,而且Java领域里主流的关系型数据库就是mysql。这部分一般在你学习Servlet/Jsp的时候,就会接触到的,其中的JDBC部分就是数据库相关的部分。你不仅要学会使用JDBC操作数据库,还要学会使用数据库客户端工具,比如navicat,sqlyog,二选一即可。

 开发框架:目前比较主流的是SSM框架,即spring、springmvc、mybatis。你需要学会这三个框架的搭建,并用它们做出一个简单的增删改查的Web项目。你可以不理解那些配置都是什么含义,以及为什么要这么做,这些留着后面你去了解。但你一定要可以快速的利用它们三个搭建出一个Web框架,你可以记录下你第一次搭建的过程,相信我,你一定会用到的。还要提一句的是,你在搭建SSM的过程中,可能会经常接触到一个叫maven的工具。这个工具也是你以后工作当中几乎是必须要使用的工具,所以你在搭建SSM的过程中,也可以顺便了解一下maven的知识。在你目前这个阶段,你只需要在网络上了解一下maven基本的使用方法即可,一些高端的用法随着你工作经验的增加,会逐渐接触到的。


 在这一年里,你至少需要看完《Java编程思想》这本书。这本书的内容是帮助你对于Java有一个更加深入的了解,是Java基础的升级版。 总而言之,这个阶段的核心学习思想就是,在工作中实践,并且更加深入的了解Java基础。

 对于参加工作1年到2年的同学。这部分时间段的同学,已经对Java有了一个更加深入的了解。但是对于面向对象的体会可能还不够深刻,编程的时候还停留在完成功能的层次,很少会去考虑设计的问题。于是这个时候,设计模式就来了。我当时看的是《大话设计模式》这本书,并且写了完整版的设计模式博客。因此,我要求大家,最多在你工作一年的时候,必须开始写博客,而设计模式就是你博客的开端。

此外,设计模式并不是你这一年唯一的任务,你还需要看一些关于代码编写优化的书。比如《重构 改善既有代码的设计》,《effective java》。总而言之,这个阶段,你的核心任务就是提高你的代码能力,要能写出一手优雅的代码。

对于参加工作2年到3年的同学有的同学在这个时候觉得自己已经很牛逼了,于是忍不住开始慢慢松懈。请记住,你还嫩的多。这个阶段,有一本书是你必须看的,它叫做《深入理解Java虚拟机》。这本书绝对是Java开发者最重要的书,没有之一。在我眼里,这本书的重要性还要高于《Java编程思想》。这本书的内容是帮助你全面的了解Java虚拟机,在这个阶段,你一定已经知道Java是运行在JVM之上的。所以,对于JVM,你没有任何理由不了解它。

这个时候,你应该去更加深入的了解并发相关的知识,而这部分内容,我比较推荐《Java并发编程实战》这本书。只要你把这本书啃下来了,并发的部分基本已经了解了十之六七。与此同时,这个阶段你要做的事情还远不止如此。这个时候,你应该对于你所使用的框架应该有了更深入的了解,对于Java的类库也有了更深入的了解。




因此,你需要去看一些JDK中的类的源码,也包括你所使用的框架的源码。这些源码能看懂的前提是,你必须对设计模式非常了解。否则的话,你看源码的过程中,永远会有这样那样的疑问,这段代码为什么要这么写?为什么要定义这个接口,它看起来好像很多余?由此也可以看出,这些学习的过程是环环相扣的,如果你任何一个阶段拉下来了,那么你就真的跟不上了,或者说是一步慢步步慢。而且我很负责的告诉你,我在这个阶段的时候,所学习的东西远多于这里所罗列出来的。




总而言之,这个阶段,你需要做的是深入了解Java底层和Java类库(比如并发那本书就是Java并发包java.concurrent的内容),也就是JVM和JDK的相关内容。而且还要更深入的去了解你所使用的框架,方式比较推荐看源码或者看官方文档。另外,还有一种学习的方式,在2年这个阶段,也应该启用了,那就是造轮子。不要听信那套“不要重复造轮子”的论调,那是公司为了节省时间成本编造出来的。重复造轮子或许对别人没有价值,因为你造的轮子可能早就有了,而且一般情况下你造出来的轮子还没有现存的好。

但是对别人没有价值,不代表对你自己没有价值。一个造轮子的过程,是一个从无到有的过程。这个过程可以对你进行系统的锻炼,它不仅考察你的编码能力,还考察你的框架设计能力,你需要让你的轮子拥有足够好的扩展性、健壮性。而且在造轮子的过程中,你会遇到各种各样的难题,这些难题往往又是你学习的契机。当你把轮子造好的时候,你一定会发现,其实你自己收获了很多。所以,这个阶段,除了上面提到的了解JVM、JDK和框架源码以外,也请你根据别人优秀的源码,去造一个任何你能够想象出来的轮子。第四部分:参加工作3年到4年的同学这个阶段的同学,提升已经是很难了,而且这个阶段的学习往往会比较多样化。因为在前3年的过程中,你肯定或多或少接触过一些其它的技术,比如大数据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等等。这些技术,你能精通任何一项,都将是你未来面试时巨大的优势,因此如果你对某一项技术感兴趣的话,这个时候可以深入去研究一下。这项技术不一定是你工作所用到的,但一定是相关的。而且在研究一门新技术时,切忌朝三暮四。有的同学今天去整整大数据,搞搞Hadoop、hbase一类的东西。过不了一段时间,就觉得没意思,又去研究分布式缓存,比如redis。然后又过不了一段时间,又去研究分布式计算,比如整整Mapreduce或者storm。结果到最后,搞得自己好像什么都会一样,在简历上大言不惭的写上大数据、分布式缓存、分布式计算都了解,其实任何一个都只是浮于表面。到时候面试官随便一问,就把你给识破了。我比较推崇的基础书籍有三本,分别是《深入理解计算机系统》,《tcp/ip详解 卷一、二、三》,《数据结构与算法》。其中TCP/IP有三本书,但我们这里把这三本看成是一本大书。这三本分别适合三种人,《深入理解计算机系统》比较适合一直从事Java Web开发和APP后端开发工作的人群。《tcp/ip详解 卷一、二、三》比较适合做网络编程的人群,比如你使用netty去开发的话,那么就要对TCP/IP有更深入的了解。而《数据结构与算法》这本书,则比较适合做计算研究工作的人,比如刚才提到的分布式计算。另外,我要强调的是,这里所说的适合,并不是其它两本对你就没有用。比如你做Java Web和APP后端开发,《tcp/ip详解 卷一、二、三》这本书对你的作用也是很大的。这里只是分出个主次关系而已,你要是时间足够的话,能把三本都精读那当然最好不过了。第五部分:参加工作4年到5年的同学经过前面一年的历练,相信你在自己所钻研的领域已经有了自己一定的见解,这个时候,技术上你应该已经遇到瓶颈了。这个时候不要着急提高自己的技术,已经是时候提高你的影响力了,你可以尝试去一些知名的公司去提高你的背景,你可以发表一些文章去影响更多的人。当然,你也可以去Github创建一个属于你的开源项目,去打造自己的产品。

这次的开源项目不同于之前的造轮子,你这个时候是真的要去尽量尝试造出来真正对别人有价值的轮子。技术学到这个阶段,很容易遇到瓶颈,而且往往达到一定程度后,你再深入下去的收效就真的微乎其微了,除非你是专门搞学术研究的。然而很可惜,大部分程序猿做不到这一步,那是科学家做的事情。这个时候提高影响力不仅仅是因为技术上容易遇到瓶颈,更多的是影响力可以给你创造更多的机会。程序猿在某种程度上和明星很像,一个好的电视剧和电影就可以成就一批明星,程序猿有的时候也是,一个好的项目就可以成就一群程序猿。比如国内几个脍炙人口的项目,像淘宝、支付宝、QQ、百度、微信等等。这每一个项目,都成就了一批程序猿。我敢说,这里面任何一个项目,如果你是它的核心开发,光是这样一个Title,就已经是你非常大的优势。更何况还不止如此,Title说到底也是个名头,更重要的是,这种项目在做的时候,对你的历练一定也是非常给力的。
 
收起阅读 »

年薪百万,Java大数据逆袭高富帅

大数据时代,中国IT环境也将面临重新洗牌,不仅仅是企业,更是程序员们转型可遇而不可求的机遇。

国内大多数大型互联网公司的程序员被称作研发工程师,但实际上国内几乎没有研发项目,只能叫做开发。开发程序员的工作大多是重复性劳动,容易产生疲惫感,薪资在工作2-5年内就达到了一个峰值,再要提升就比较困难,这样就导致了很多程序员最终转行做了其他行业。
 
JAVA的精密,强大,拥有其它语言不可替代的性能和可维护性,早已经是成为最受欢迎的编程语言之一,很多人想进入IT行业,首选的第一门语言就是JAVA。但是,在未来10年肯定是大数据的天下,人工智能的爆发,将会有大量企业会进入大数据领域,而从JAVA程序员转JAVA大数据就会有天然的优势,因为目前大数据的架构基本都是用JAVA语言完成,未来10年,JAVA大数据的需求量会越来越大。

现在学习JAVA的小伙伴,如果想以后不被淘汰,将来势必会进军大数据行列,根据目前的行业动态,JAVA程序员由于发展的局限性以及随着年龄增长,在竞争方面也越来越容易被年轻一代赶超,因为JAVA程序员的加班时间过长导致,所以大批JAVA工程师前辈已经先一步进军大数据了。下面我们来分析一下大数据在未来的优势:市场需求量大经常调查显示,去年有很多大小互联网公司都在布局大数据。而目前大数据方面的人才依旧十分紧缺,比如大数据生态Spark需要的Scala工程师。基于Java和Scala等技术密切的关系,有些大数据公司会瞄准JAVA工程师,通过培养转而成为大数据工程师。

如果你先一步在学习JAVA的基础上再学习一些大数据的知识,那么将来你在公司的竞争力会明显大于一般的JAVA工程师,甚至可能提前一步进军大数据行列。

就业方向广泛
 
JAVA大数据的人才以后可以进行的工作有很多种,下面举几个例子:

(1)大数据开发工程师

基础大数据服务平台,大中型的商业应用包括我们常说的企业级应用(主要指复杂的大企业的软件系统)、各种类型的网站等。负责搭建大数据应用平台以及开发分析应用程序。

(2)大数据分析师

负责数据挖掘工作,运用Hive、Hbase等技术,专门对从事行业数据搜集、整理、分析,并依据数据做出行业研究、评估和预测的专业人员。以及通过使用新型数据可视化工具如Spotifre,Qlikview和Tableau,对数据进行数据可视化和数据呈现。

(3)Android工程师

Android是一种基于Linux的自由及开放源代码的操作系统,其源代码是Java。所以市场上见到的手机系统例如MIUI,阿里云,乐蛙等,都是修改源代码再发行的。Java做安卓不单单是指系统,还有APP对于更多的开发人员来说,他们更多的时间是花在开发APP上面。

还有很多其它职位比如大数据挖掘等就不一 一说明了。

行业起薪高
 
下面我们用一张图让大家了解一下大数据工程师和java工程师的平均薪资

微信图片_20170821180446.jpg

 
通过这篇文章我相信大家对JAVA大数据行业都有一点了解,在这个大家都呼吁的大数据时代,转型做JAVA大数据是一个非常好的选择,我相信即使几年以后大数据依旧是一个很好的领域。

在美国,大数据工程师平均年薪达17.5万美元,在中国顶尖的互联网公司里,大数据工程师的薪酬也比同级别的其他职位高出30%以上。在未来若干年内大数据工程师都会是供不应求的状况,指望大学培养出合格的大数据人才有如天方夜谭,因此程序员们,你们的春天到了!
 
继续阅读 »
大数据时代,中国IT环境也将面临重新洗牌,不仅仅是企业,更是程序员们转型可遇而不可求的机遇。

国内大多数大型互联网公司的程序员被称作研发工程师,但实际上国内几乎没有研发项目,只能叫做开发。开发程序员的工作大多是重复性劳动,容易产生疲惫感,薪资在工作2-5年内就达到了一个峰值,再要提升就比较困难,这样就导致了很多程序员最终转行做了其他行业。
 
JAVA的精密,强大,拥有其它语言不可替代的性能和可维护性,早已经是成为最受欢迎的编程语言之一,很多人想进入IT行业,首选的第一门语言就是JAVA。但是,在未来10年肯定是大数据的天下,人工智能的爆发,将会有大量企业会进入大数据领域,而从JAVA程序员转JAVA大数据就会有天然的优势,因为目前大数据的架构基本都是用JAVA语言完成,未来10年,JAVA大数据的需求量会越来越大。

现在学习JAVA的小伙伴,如果想以后不被淘汰,将来势必会进军大数据行列,根据目前的行业动态,JAVA程序员由于发展的局限性以及随着年龄增长,在竞争方面也越来越容易被年轻一代赶超,因为JAVA程序员的加班时间过长导致,所以大批JAVA工程师前辈已经先一步进军大数据了。下面我们来分析一下大数据在未来的优势:市场需求量大经常调查显示,去年有很多大小互联网公司都在布局大数据。而目前大数据方面的人才依旧十分紧缺,比如大数据生态Spark需要的Scala工程师。基于Java和Scala等技术密切的关系,有些大数据公司会瞄准JAVA工程师,通过培养转而成为大数据工程师。

如果你先一步在学习JAVA的基础上再学习一些大数据的知识,那么将来你在公司的竞争力会明显大于一般的JAVA工程师,甚至可能提前一步进军大数据行列。

就业方向广泛
 
JAVA大数据的人才以后可以进行的工作有很多种,下面举几个例子:

(1)大数据开发工程师

基础大数据服务平台,大中型的商业应用包括我们常说的企业级应用(主要指复杂的大企业的软件系统)、各种类型的网站等。负责搭建大数据应用平台以及开发分析应用程序。

(2)大数据分析师

负责数据挖掘工作,运用Hive、Hbase等技术,专门对从事行业数据搜集、整理、分析,并依据数据做出行业研究、评估和预测的专业人员。以及通过使用新型数据可视化工具如Spotifre,Qlikview和Tableau,对数据进行数据可视化和数据呈现。

(3)Android工程师

Android是一种基于Linux的自由及开放源代码的操作系统,其源代码是Java。所以市场上见到的手机系统例如MIUI,阿里云,乐蛙等,都是修改源代码再发行的。Java做安卓不单单是指系统,还有APP对于更多的开发人员来说,他们更多的时间是花在开发APP上面。

还有很多其它职位比如大数据挖掘等就不一 一说明了。

行业起薪高
 
下面我们用一张图让大家了解一下大数据工程师和java工程师的平均薪资

微信图片_20170821180446.jpg

 
通过这篇文章我相信大家对JAVA大数据行业都有一点了解,在这个大家都呼吁的大数据时代,转型做JAVA大数据是一个非常好的选择,我相信即使几年以后大数据依旧是一个很好的领域。

在美国,大数据工程师平均年薪达17.5万美元,在中国顶尖的互联网公司里,大数据工程师的薪酬也比同级别的其他职位高出30%以上。在未来若干年内大数据工程师都会是供不应求的状况,指望大学培养出合格的大数据人才有如天方夜谭,因此程序员们,你们的春天到了!
 
收起阅读 »

为什么程序员和企业都喜欢用Java?

java语言的特性
 
简单性:
Java语言保留C++优势精华的 同时,剔除一些冗余特性,集万千优势于一身的Java目前是世界上受程序员欢迎的编程语言。
 
面向对象:
Java是一个面向对象的语言,这意味着要注意应用中的数据和操纵数据的方法,而不是严格地用过程来思考。
 
分布性:
Java设计成支持在网络上应用,它是分布式语言。Java程序只要编写一次,就可跨平台到处运行。
 
编译和解释性:
Java程序可以在任何实现了Java解释程序和运行系统的系统上运行,与传统耗时编译、链接、测试相比,Java可以快速程序开发。
 
稳健性:
Java初始设计便可写高可靠和稳健软件,作为一门强类型语言,Java不仅可靠,还可异常处理,简化出错处理和回复任。
 
安全性:
Java的存储分配模型是它防御恶意代码的主要方法之一,优秀的安全机制使得Java与其他编程语言区分开来。
 
移植性:
Java使得语言声明不依赖于实现的方面,并且,Java环境本身对新的硬件平台和操作系统是可移植的。
 
高性能:
Java是一种先编译后解释的语言,考虑到一些“及时”编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。
 
多线程性:
Java是多线程语言,它提供支持多线程的执行,能处理不同任务,使具有线程的程序设计很容易。
 
动态性:
Java语言设计成适应于变化的环境,它是一个动态的语言。
继续阅读 »
java语言的特性
 
简单性:
Java语言保留C++优势精华的 同时,剔除一些冗余特性,集万千优势于一身的Java目前是世界上受程序员欢迎的编程语言。
 
面向对象:
Java是一个面向对象的语言,这意味着要注意应用中的数据和操纵数据的方法,而不是严格地用过程来思考。
 
分布性:
Java设计成支持在网络上应用,它是分布式语言。Java程序只要编写一次,就可跨平台到处运行。
 
编译和解释性:
Java程序可以在任何实现了Java解释程序和运行系统的系统上运行,与传统耗时编译、链接、测试相比,Java可以快速程序开发。
 
稳健性:
Java初始设计便可写高可靠和稳健软件,作为一门强类型语言,Java不仅可靠,还可异常处理,简化出错处理和回复任。
 
安全性:
Java的存储分配模型是它防御恶意代码的主要方法之一,优秀的安全机制使得Java与其他编程语言区分开来。
 
移植性:
Java使得语言声明不依赖于实现的方面,并且,Java环境本身对新的硬件平台和操作系统是可移植的。
 
高性能:
Java是一种先编译后解释的语言,考虑到一些“及时”编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。
 
多线程性:
Java是多线程语言,它提供支持多线程的执行,能处理不同任务,使具有线程的程序设计很容易。
 
动态性:
Java语言设计成适应于变化的环境,它是一个动态的语言。 收起阅读 »

高级Java程序员应当知道的10个面向对象设计原则

面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) 、 Decorator(装饰器)、Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面。学习面向对象编程像“抽象”、“封装”、“多态”、“继承” 等基础知识是重要的,但同时为了创建简洁、模块化的设计,了解这些设计原则也同等重要。我经常看到不同经验水平的java程序员,他们有的不知道这些OOPS 和SOLID设计原则,有的只是不知道一个特定的设计原则会带来怎样的益处,甚至不知道在编码中如何使用这些设计原则。

(设计原则)底线是永远追求高内聚、低耦合的编码或设计。 Apache 和 Sun的开源代码是学习Java和OOPS设计原则的良好范例。它们向我们展示了,设计原则在Java编程中是如何使用的。Java JDK 使用了一些设计原则:BorderFactory类中的工厂模式、Runtime类中的单例模式、java.io 类中的装饰器模式。顺便说一句,如果您真的对Java编码原则感兴趣,请阅读Joshua Bloch 的Effective Java,他编写过Java API。我个人最喜欢的关于面向对象设计模式的是Kathy Sierra的Head First Design Pattern(深入浅出设计模式),以及其它的关于深入浅出面向对象分析和设计。这些书对编写更好的代码有很大帮助,充分利用各种面向对象和SOLID的设计模式。

虽然学习设计模式(原则)最好的方法是现实中的例子和理解违反设计原则带来的不便,本文的宗旨是向那些没有接触过或正处于学习阶段的Java程序员介绍面向对象设计原则。我个人认为OOPS 和SOLID设计原则需要有文章清楚的介绍它们,在此我一定尽力做到这点,但现在请您准备浏览以下设计模式(原则)
 
减少重复代码
DRY – Don’t repeat yourself

我们第一个面向对象设计原则是:DRY ,从名称可以看出DRY(don’t repeat yourself)意思是不写重复代码,而是抽象成可复用的代码块。如果您有两处以上相同的代码块,请考虑把它们抽象成一个单独的方法;或者您多次使用了硬编码的值,请把它们设置成公共常量。这种面向对象设计原则的优点是易于维护。重要的是不要滥用此原则,重复不是针对代码而是针对功能来说。它的意思是,如果您使用通用代码来验证OrderID和SSN,这并不意味着它们是相同的或者他们今后将保持不变。通过把通用代码用于实现两种不同的功能,或者您把这两种不同的功能密切地联系在一起;当您的OrderID格式改变时,您的SSN验证代码将会中断。所以要当心这种耦合,而且不要把彼此之间没有任何关系却类似的代码组合在一起。

封装经常修改的代码

Encapsulate What Changes

在软件领域永远不变的是“变化”,所以把您认为或怀疑将来要被修改的代码封装起来。这种面向对象设计模式的优点是:易于测试和维护恰当封装的代码。如果您在用Java编程,那么请遵守以下原则:变量和方法的访问权限默认设置为私有,并且逐步放开它们的访问权限,例如从“private”到“protected ”、“not public”。Java中的一些设计模式使用了封装,工厂设计模式就是一个例子,它封装了创建对象的代码而且提供了以下灵活性:后续生成新对象不影响现有的代码。

打开/关闭设计原则

OpenClosed Design Principle

类、方法/函数应当是对扩展(新功能)开放,对修改闭合。这是另外一个优雅的SOLID 设计原则,以防止有人修改通过测试的代码。理想情况下假如您添加了新功能,那么您的代码要经过测试,这就是打开/关闭设计原则的目标。顺便说一句,SOLID中的字母“O”指的是打开/关闭设计原则。

单一职责原则

Single Responsibility Principle(SRP)

单一职责原则是另外一个SOLID设计原则,SOLID中的字母“S”指的就是它。按照SRP,一个类修改的原因应当有且只有一个,或者一个类应当总是实现单一功能。如果您在Java中的一个类实现了多个功能,那么这些功能之间便产生了耦合关系;如果您修改其中的一个功能,您有可能就打破了这种耦合关系,那么就要进行另一轮测试以避免产生新的问题。

依赖注入/反转原则

Dependency Injection or Inversion principle

不要问框架的依赖注入功能将会给你带来什么益处,依赖注入功能在spring框架里已经很好的得到了实现,这一设计原则的优雅之处在于:DI框架注入的任何一个类都易于用模拟对象进行测试,并且更易于维护,因为创建对象的代码在框架里是集中的而且和客户端代码是隔离的。有多种方法可以实现依赖注入,例如使用字节码工具,其中一些AOP(面向切面编程)框架如切入点表达式或者spring里使用的代理。想对这种SOLID设计原则了解更多,请看IOC 和 DI设计模式中的例子。 SOLID中的字母“D”指的就是这种设计原则。

优先使用组合而非继承

Favor Composition over Inheritance

如果可以的话,要优先使用组合而非继承。你们中的一些人可能为此争论,但我发现组合比继承更有灵活性。组合允许在运行时通过设置属性修改一个类的行为,通过使用多态即以接口的形式实现类之间的组合关系,并且为修改组合关系提供了灵活性。甚至 Effective Java也建议优先使用组合而非继承。

里氏替换原则

Liskov Substitution Principle LSP

根据里氏替换原则,父类出现的地方可以用子类来替换,例如父类的方法或函数被子类对象替换应该没有任何问题。LSP和单一职责原则、接口隔离原则密切相关。如果一个父类的功能比其子类还要多,那么它可能不支持这一功能,而且也违反了LSP设计原则。为了遵循 LSP SOLID设计原则,派生类或子类(相对父类比较)必须增强功能,而非减少。SOLID中的字母“L”指的就是 LSP设计原则。

接口隔离原则

接口隔离原则指,如果不需要一个接口的功能,那么就不要实现此接口。这大多在以下情况发生:一个接口包含多种功能,而实现类只需要其中一种功能。接口设计是一种棘手的工作,因为一旦发布了接口,您就不能修改它否则会影响实现该接口的类。在Java中这种设计原则的另一个好处是:接口有一个特点,任何类使用它之前都要实现该接口所有的方法,所以使用功能单一的接口意味着实现更少的方法。

编程以接口(而非实现对象)为中心

编程总是以接口(而非实现对象)为中心,这会使代码的结构灵活,而且任何一个新的接口实现对象都能兼容现有代码结构。所以在Java中,变量、方法返回值、方法参数的数据类型请使用接口。这是许多Java程序员的建议, Effective Java 以及 head first design pattern 等书也这样建议。

代理原则

不要期望一个类完成所有的功能,可以适当地把一些功能交给代理类实现。代理原则的典范是:Java 中的equals() 和 hashCode() 方法。为了比较两个对象的内容是否相同,我们让用于比较的类本身完成对比工作而非它们的调用方。这种设计原则的好处是:没有重复编码而且很容易修改类的行为。

总结

以上所有面向对象的设计原则可以帮助您写出灵活、优雅的代码:具有高内聚低耦合的代码结构。理论只是第一步,更重要的是我们要习得一种能力去发现什么时候使用这些设计原则。去发现我们是否违反了什么设计原则和影响了代码的灵活性,但是世界上没有什么是完美的,我们解决问题时不能总去使用设计模式和设计原则,它们大多用于有较长维护周期的大型企业项目。
 
继续阅读 »
面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) 、 Decorator(装饰器)、Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面。学习面向对象编程像“抽象”、“封装”、“多态”、“继承” 等基础知识是重要的,但同时为了创建简洁、模块化的设计,了解这些设计原则也同等重要。我经常看到不同经验水平的java程序员,他们有的不知道这些OOPS 和SOLID设计原则,有的只是不知道一个特定的设计原则会带来怎样的益处,甚至不知道在编码中如何使用这些设计原则。

(设计原则)底线是永远追求高内聚、低耦合的编码或设计。 Apache 和 Sun的开源代码是学习Java和OOPS设计原则的良好范例。它们向我们展示了,设计原则在Java编程中是如何使用的。Java JDK 使用了一些设计原则:BorderFactory类中的工厂模式、Runtime类中的单例模式、java.io 类中的装饰器模式。顺便说一句,如果您真的对Java编码原则感兴趣,请阅读Joshua Bloch 的Effective Java,他编写过Java API。我个人最喜欢的关于面向对象设计模式的是Kathy Sierra的Head First Design Pattern(深入浅出设计模式),以及其它的关于深入浅出面向对象分析和设计。这些书对编写更好的代码有很大帮助,充分利用各种面向对象和SOLID的设计模式。

虽然学习设计模式(原则)最好的方法是现实中的例子和理解违反设计原则带来的不便,本文的宗旨是向那些没有接触过或正处于学习阶段的Java程序员介绍面向对象设计原则。我个人认为OOPS 和SOLID设计原则需要有文章清楚的介绍它们,在此我一定尽力做到这点,但现在请您准备浏览以下设计模式(原则)
 
减少重复代码
DRY – Don’t repeat yourself

我们第一个面向对象设计原则是:DRY ,从名称可以看出DRY(don’t repeat yourself)意思是不写重复代码,而是抽象成可复用的代码块。如果您有两处以上相同的代码块,请考虑把它们抽象成一个单独的方法;或者您多次使用了硬编码的值,请把它们设置成公共常量。这种面向对象设计原则的优点是易于维护。重要的是不要滥用此原则,重复不是针对代码而是针对功能来说。它的意思是,如果您使用通用代码来验证OrderID和SSN,这并不意味着它们是相同的或者他们今后将保持不变。通过把通用代码用于实现两种不同的功能,或者您把这两种不同的功能密切地联系在一起;当您的OrderID格式改变时,您的SSN验证代码将会中断。所以要当心这种耦合,而且不要把彼此之间没有任何关系却类似的代码组合在一起。

封装经常修改的代码

Encapsulate What Changes

在软件领域永远不变的是“变化”,所以把您认为或怀疑将来要被修改的代码封装起来。这种面向对象设计模式的优点是:易于测试和维护恰当封装的代码。如果您在用Java编程,那么请遵守以下原则:变量和方法的访问权限默认设置为私有,并且逐步放开它们的访问权限,例如从“private”到“protected ”、“not public”。Java中的一些设计模式使用了封装,工厂设计模式就是一个例子,它封装了创建对象的代码而且提供了以下灵活性:后续生成新对象不影响现有的代码。

打开/关闭设计原则

OpenClosed Design Principle

类、方法/函数应当是对扩展(新功能)开放,对修改闭合。这是另外一个优雅的SOLID 设计原则,以防止有人修改通过测试的代码。理想情况下假如您添加了新功能,那么您的代码要经过测试,这就是打开/关闭设计原则的目标。顺便说一句,SOLID中的字母“O”指的是打开/关闭设计原则。

单一职责原则

Single Responsibility Principle(SRP)

单一职责原则是另外一个SOLID设计原则,SOLID中的字母“S”指的就是它。按照SRP,一个类修改的原因应当有且只有一个,或者一个类应当总是实现单一功能。如果您在Java中的一个类实现了多个功能,那么这些功能之间便产生了耦合关系;如果您修改其中的一个功能,您有可能就打破了这种耦合关系,那么就要进行另一轮测试以避免产生新的问题。

依赖注入/反转原则

Dependency Injection or Inversion principle

不要问框架的依赖注入功能将会给你带来什么益处,依赖注入功能在spring框架里已经很好的得到了实现,这一设计原则的优雅之处在于:DI框架注入的任何一个类都易于用模拟对象进行测试,并且更易于维护,因为创建对象的代码在框架里是集中的而且和客户端代码是隔离的。有多种方法可以实现依赖注入,例如使用字节码工具,其中一些AOP(面向切面编程)框架如切入点表达式或者spring里使用的代理。想对这种SOLID设计原则了解更多,请看IOC 和 DI设计模式中的例子。 SOLID中的字母“D”指的就是这种设计原则。

优先使用组合而非继承

Favor Composition over Inheritance

如果可以的话,要优先使用组合而非继承。你们中的一些人可能为此争论,但我发现组合比继承更有灵活性。组合允许在运行时通过设置属性修改一个类的行为,通过使用多态即以接口的形式实现类之间的组合关系,并且为修改组合关系提供了灵活性。甚至 Effective Java也建议优先使用组合而非继承。

里氏替换原则

Liskov Substitution Principle LSP

根据里氏替换原则,父类出现的地方可以用子类来替换,例如父类的方法或函数被子类对象替换应该没有任何问题。LSP和单一职责原则、接口隔离原则密切相关。如果一个父类的功能比其子类还要多,那么它可能不支持这一功能,而且也违反了LSP设计原则。为了遵循 LSP SOLID设计原则,派生类或子类(相对父类比较)必须增强功能,而非减少。SOLID中的字母“L”指的就是 LSP设计原则。

接口隔离原则

接口隔离原则指,如果不需要一个接口的功能,那么就不要实现此接口。这大多在以下情况发生:一个接口包含多种功能,而实现类只需要其中一种功能。接口设计是一种棘手的工作,因为一旦发布了接口,您就不能修改它否则会影响实现该接口的类。在Java中这种设计原则的另一个好处是:接口有一个特点,任何类使用它之前都要实现该接口所有的方法,所以使用功能单一的接口意味着实现更少的方法。

编程以接口(而非实现对象)为中心

编程总是以接口(而非实现对象)为中心,这会使代码的结构灵活,而且任何一个新的接口实现对象都能兼容现有代码结构。所以在Java中,变量、方法返回值、方法参数的数据类型请使用接口。这是许多Java程序员的建议, Effective Java 以及 head first design pattern 等书也这样建议。

代理原则

不要期望一个类完成所有的功能,可以适当地把一些功能交给代理类实现。代理原则的典范是:Java 中的equals() 和 hashCode() 方法。为了比较两个对象的内容是否相同,我们让用于比较的类本身完成对比工作而非它们的调用方。这种设计原则的好处是:没有重复编码而且很容易修改类的行为。

总结

以上所有面向对象的设计原则可以帮助您写出灵活、优雅的代码:具有高内聚低耦合的代码结构。理论只是第一步,更重要的是我们要习得一种能力去发现什么时候使用这些设计原则。去发现我们是否违反了什么设计原则和影响了代码的灵活性,但是世界上没有什么是完美的,我们解决问题时不能总去使用设计模式和设计原则,它们大多用于有较长维护周期的大型企业项目。
 
收起阅读 »

【i码邦】java基础教程分享-20-方法

Java 方法

在前面几个章节中我们经常使用到 System.out.println(),那么它是什么呢?
  • println() 是一个方法。
  • System 是系统类。
  • out 是标准输出对象。这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 println()。


那么什么是方法呢?

Java方法是语句的集合,它们在一起执行一个功能。

方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用

方法的优点

1. 使程序变得更简短而清晰。
2. 有利于程序维护。
3. 可以提高程序开发的效率。
4. 提高了代码的重用性。

方法的命名规则

1. 必须以字母、'_'或'$'开头。
2. 可以包括数字,但不能以它开头。

方法的定义

一般情况下,定义一个方法包含以下语法:
修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; }
如:public static int age(int birthday){...}
方法包含一个方法头和一个方法体。下面是一个方法的所有部分:
  • 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型,如上面的public static。
  • 返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型,如上面的int。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
  • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名,如上面的age。
  • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数,如上面的int birthday。参数是可选的,方法可以不包含任何参数。
  • 方法体:方法体包含具体的语句,定义该方法的功能,就是上面{...}。

注意: 在一些其它语言中方法指过程和函数。一个返回非void类型返回值的方法称为函数;一个返回void类型返回值的方法叫做过程。
 
方法调用

Java 支持两种调用方法的方式,根据方法是否返回值来选择。
当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。
当方法返回一个值的时候,方法调用通常被当做一个值。
 
继续阅读 »
Java 方法

在前面几个章节中我们经常使用到 System.out.println(),那么它是什么呢?
  • println() 是一个方法。
  • System 是系统类。
  • out 是标准输出对象。这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 println()。


那么什么是方法呢?

Java方法是语句的集合,它们在一起执行一个功能。

方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建,在其他地方被引用

方法的优点

1. 使程序变得更简短而清晰。
2. 有利于程序维护。
3. 可以提高程序开发的效率。
4. 提高了代码的重用性。

方法的命名规则

1. 必须以字母、'_'或'$'开头。
2. 可以包括数字,但不能以它开头。

方法的定义

一般情况下,定义一个方法包含以下语法:
修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; }
如:public static int age(int birthday){...}
方法包含一个方法头和一个方法体。下面是一个方法的所有部分:
  • 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型,如上面的public static。
  • 返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型,如上面的int。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
  • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名,如上面的age。
  • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数,如上面的int birthday。参数是可选的,方法可以不包含任何参数。
  • 方法体:方法体包含具体的语句,定义该方法的功能,就是上面{...}。

注意: 在一些其它语言中方法指过程和函数。一个返回非void类型返回值的方法称为函数;一个返回void类型返回值的方法叫做过程。
 
方法调用

Java 支持两种调用方法的方式,根据方法是否返回值来选择。
当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。
当方法返回一个值的时候,方法调用通常被当做一个值。
 
收起阅读 »

【i码邦】java基础教程分享-19-重载

在Java中,同一个类中的多个方法可以有相同的名字,只要它们的参数列表不同就可以,这被称为方法重载(method overloading)。

参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。

重载是面向对象的一个基本特性。

下面看一个详细的实例。
 

public class Demo{
// 一个普通的方法,不带参数
void test(){
System.out.println("No parameters");
}
// 重载上面的方法,并且带了一个整型参数
void test(int a){
System.out.println("a: " + a);
}
// 重载上面的方法,并且带了两个参数
void test(int a,int b){
System.out.println("a and b: " + a + " " + b);
}
// 重载上面的方法,并且带了一个双精度参数
double test(double a){
System.out.println("double a: " + a);
return a*a;
}
public static void main(String args[]){
Demo obj= new Demo();
obj.test();
obj.test(2);
obj.test(2,3);
obj.test(2.0);
}
}


运行结果:

No parameters
a: 2
a and b: 2 3
double a: 2.0


通过上面的实例,读者可以看出,重载就是在一个类中,有相同的函数名称,但形参不同的函数。重载的结果,可以让一个程序段尽量减少代码和方法的种类。

说明:
参数列表不同包括:
  • 个数不同、类型不同和顺序不同。
  • 仅仅参数变量名称不同是不可以的。
  • 跟成员方法一样,构造方法也可以重载。
  • 声明为final的方法不能被重载。
  • 声明为static的方法不能被重载,但是能够被再次声明。

方法的重载的规则:
  • 方法名称必须相同。
  • 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)。
  • 方法的返回类型可以相同也可以不相同。
  • 仅仅返回类型不同不足以成为方法的重载。

方法重载的实现:
方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错,这叫做重载分辨。
 
继续阅读 »
在Java中,同一个类中的多个方法可以有相同的名字,只要它们的参数列表不同就可以,这被称为方法重载(method overloading)。

参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。

重载是面向对象的一个基本特性。

下面看一个详细的实例。
 

public class Demo{
// 一个普通的方法,不带参数
void test(){
System.out.println("No parameters");
}
// 重载上面的方法,并且带了一个整型参数
void test(int a){
System.out.println("a: " + a);
}
// 重载上面的方法,并且带了两个参数
void test(int a,int b){
System.out.println("a and b: " + a + " " + b);
}
// 重载上面的方法,并且带了一个双精度参数
double test(double a){
System.out.println("double a: " + a);
return a*a;
}
public static void main(String args[]){
Demo obj= new Demo();
obj.test();
obj.test(2);
obj.test(2,3);
obj.test(2.0);
}
}


运行结果:

No parameters
a: 2
a and b: 2 3
double a: 2.0


通过上面的实例,读者可以看出,重载就是在一个类中,有相同的函数名称,但形参不同的函数。重载的结果,可以让一个程序段尽量减少代码和方法的种类。

说明:
参数列表不同包括:
  • 个数不同、类型不同和顺序不同。
  • 仅仅参数变量名称不同是不可以的。
  • 跟成员方法一样,构造方法也可以重载。
  • 声明为final的方法不能被重载。
  • 声明为static的方法不能被重载,但是能够被再次声明。

方法的重载的规则:
  • 方法名称必须相同。
  • 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)。
  • 方法的返回类型可以相同也可以不相同。
  • 仅仅返回类型不同不足以成为方法的重载。

方法重载的实现:
方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错,这叫做重载分辨。
 
收起阅读 »

【i码邦】APP功能全面介绍!

很多下载【i码邦】app的用户都不清楚工具如何使用,下面就一一对应图文介绍!
 
【i码邦】APP是一款集java IDE和java学习一体的软件,我们可以随时随地通过软件进行java编码、编译、运行,也可以随时翻阅java技术资料、学习java技术,或者提出自己的疑问,获得其他用户的解答等等,总之,是一个java基础学习的好工具。
 
【i码邦】主界面


 
 首页有几个版块,【编程】进入之后就是java的ide环境,可以直接进行java编码、调试、运行 

 i码邦【编程】ide编码调试界面



 i码邦【编程】运行结果界面

 

 i码邦【编程】网友分享源码界面


 
i码邦【发现】提供系统的java教学资料和书籍的下载,可以下载到本地离线查看


 

i码邦 【视频】有java基础教学视频可以观看


i码邦【题库】有java基础常见问题和解答


i码邦【问答】是大家学习java时,提出的问题,


i码邦【每日一练】有java基础练习题,主要是编码动手能力的训练


i码邦【技术文章】是java基础的技术文章,是对java知识点的透彻的讲解

继续阅读 »
很多下载【i码邦】app的用户都不清楚工具如何使用,下面就一一对应图文介绍!
 
【i码邦】APP是一款集java IDE和java学习一体的软件,我们可以随时随地通过软件进行java编码、编译、运行,也可以随时翻阅java技术资料、学习java技术,或者提出自己的疑问,获得其他用户的解答等等,总之,是一个java基础学习的好工具。
 
【i码邦】主界面


 
 首页有几个版块,【编程】进入之后就是java的ide环境,可以直接进行java编码、调试、运行 

 i码邦【编程】ide编码调试界面



 i码邦【编程】运行结果界面

 

 i码邦【编程】网友分享源码界面


 
i码邦【发现】提供系统的java教学资料和书籍的下载,可以下载到本地离线查看


 

i码邦 【视频】有java基础教学视频可以观看


i码邦【题库】有java基础常见问题和解答


i码邦【问答】是大家学习java时,提出的问题,


i码邦【每日一练】有java基础练习题,主要是编码动手能力的训练


i码邦【技术文章】是java基础的技术文章,是对java知识点的透彻的讲解

收起阅读 »

【i码邦】java基础教程分享-18-import

如果你希望使用Java包中的类,就必须先使用import语句导入。

import语句与C语言中的 #include 有些类似,语法为:

 import package1[.package2…].classname;


package 为包名,classname 为类名。例如:
  • import java.util.Date; // 导入 java.util 包下的 Date 类
  • import java.util.Scanner; // 导入 java.util 包下的 Scanner 类
  • import javax.swing.*; // 导入 javax.swing 包下的所有类,* 表示所有类

注意:
  • import 只能导入包所包含的类,而不能导入包。
  • 为方便起见,我们一般不导入单独的类,而是导入包下所有的类,例如 import java.util.*;。

 
Java 编译器默认为所有的 Java 程序导入了 JDK 的 java.lang 包中所有的类(import java.lang.*;),其中定义了一些常用类,如 System、String、Object、Math 等,因此我们可以直接使用这些类而不必显式导入。但是使用其他类必须先导入。

前面讲到的”Hello World“程序使用了System.out.println(); 语句,System 类位于 java.lang 包,虽然我们没有显式导入这个包中的类,但是Java 编译器默认已经为我们导入了,否则程序会执行失败。
 
Java类的搜索路径
Java程序运行时要导入相应的类,也就是加载 .class 文件的过程。

假设有如下的 import 语句:
  • import p1.Test;

该语句表明要导入 p1 包中的 Test 类。
 
安装JDK时,我们已经设置了环境变量 CLASSPATH 来指明类库的路径,它的值为 .;%JAVA_HOME%\lib,而 JAVA_HOME 又为 D:\Program Files\jdk1.7.0_71,所以 CLASSPATH 等价于 .;D:\Program Files\jdk1.7.0_71\lib。

Java 运行环境将依次到下面的路径寻找并载入字节码文件 Test.class:.p1\Test.class("."表示当前路径)
D:\Program Files\jdk1.7.0_71\lib\p1\Test.class
如果在第一个路径下找到了所需的类文件,则停止搜索,否则继续搜索后面的路径,如果在所有的路径下都未能找到所需的类文件,则编译或运行出错。

你可以在CLASSPATH变量中增加搜索路径,例如 .;%JAVA_HOME%\lib;C:\javalib,那么你就可以将类文件放在 C:\javalib 目录下,Java运行环境一样会找到。
 
在【i码邦】app中进行编辑代码,虽然不需要配置环境变量,但是也需要import。
 

 
继续阅读 »
如果你希望使用Java包中的类,就必须先使用import语句导入。

import语句与C语言中的 #include 有些类似,语法为:

 import package1[.package2…].classname;


package 为包名,classname 为类名。例如:
  • import java.util.Date; // 导入 java.util 包下的 Date 类
  • import java.util.Scanner; // 导入 java.util 包下的 Scanner 类
  • import javax.swing.*; // 导入 javax.swing 包下的所有类,* 表示所有类

注意:
  • import 只能导入包所包含的类,而不能导入包。
  • 为方便起见,我们一般不导入单独的类,而是导入包下所有的类,例如 import java.util.*;。

 
Java 编译器默认为所有的 Java 程序导入了 JDK 的 java.lang 包中所有的类(import java.lang.*;),其中定义了一些常用类,如 System、String、Object、Math 等,因此我们可以直接使用这些类而不必显式导入。但是使用其他类必须先导入。

前面讲到的”Hello World“程序使用了System.out.println(); 语句,System 类位于 java.lang 包,虽然我们没有显式导入这个包中的类,但是Java 编译器默认已经为我们导入了,否则程序会执行失败。
 
Java类的搜索路径
Java程序运行时要导入相应的类,也就是加载 .class 文件的过程。

假设有如下的 import 语句:
  • import p1.Test;

该语句表明要导入 p1 包中的 Test 类。
 
安装JDK时,我们已经设置了环境变量 CLASSPATH 来指明类库的路径,它的值为 .;%JAVA_HOME%\lib,而 JAVA_HOME 又为 D:\Program Files\jdk1.7.0_71,所以 CLASSPATH 等价于 .;D:\Program Files\jdk1.7.0_71\lib。

Java 运行环境将依次到下面的路径寻找并载入字节码文件 Test.class:.p1\Test.class("."表示当前路径)
D:\Program Files\jdk1.7.0_71\lib\p1\Test.class
如果在第一个路径下找到了所需的类文件,则停止搜索,否则继续搜索后面的路径,如果在所有的路径下都未能找到所需的类文件,则编译或运行出错。

你可以在CLASSPATH变量中增加搜索路径,例如 .;%JAVA_HOME%\lib;C:\javalib,那么你就可以将类文件放在 C:\javalib 目录下,Java运行环境一样会找到。
 
在【i码邦】app中进行编辑代码,虽然不需要配置环境变量,但是也需要import。
 

  收起阅读 »

【i码邦】java基础教程分享-17-this关键字

this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性。例如:

public class Demo{
public int x = 10;
public int y = 15;
public void sum(){
// 通过 this 点取成员变量
int z = this.x + this.y;
System.out.println("x + y = " + z);
}
public static void main(String[] args) {
Demo obj = new Demo();
obj.sum();
}
}


运行结果:

x + y = 25


上面的程序中,obj 是 Demo 类的一个实例,this 与 obj 等价,执行 int z = this.x + this.y;,就相当于执行 int z = obj.x + obj.y;。

注意:this 只有在类实例化后才有意义。
 
使用this区分同名变量
成员变量与方法内部的变量重名时,希望在方法内部调用成员变量,怎么办呢?这时候只能使用this,例如:

public class Demo{
    public String name;
    public int age;
  
    public Demo(String name, int age){
        this.name = name;
        this.age = age;
    }
  
    public void say(){
        System.out.println("这里是" + name + ",已经使用" + age + "年");
    }
  
    public static void main(String[] args) {
        Demo obj = new Demo("i码邦", 3);
        obj.say();
    }
}


运行结果:
这里是i码邦,已经使用3年
 
形参的作用域是整个方法体,是局部变量。在Demo()中,形参和成员变量重名,如果不使用this,访问到的就是局部变量name和age,而不是成员变量。在 say() 中,我们没有使用 this,因为成员变量的作用域是整个实例,当然也可以加上 this:

public void say(){
   System.out.println("这里是" + this.name + ",已经使用" + this.age + "年");
}


Java 默认将所有成员变量和成员方法与 this 关联在一起,因此使用 this 在某些情况下是多余的。
 
作为方法名来初始化对象
也就是相当于调用本类的其它构造方法,它必须作为构造方法的第一句。示例如下:

public class Demo{
public String name;
public int age;
public Demo(){
  this("i码邦", 3);
}
public Demo(String name, int age){
  this.name = name;
  this.age = age;
}
public void say(){
  System.out.println("这里是" + name + ",已经使用" + age + "年");
}
public static void main(String[] args) {
Demo obj = new Demo();
obj.say();
}
}


运行结果:
这里是i码邦,已经使用3年
值得注意的是:在构造方法中调用另一个构造方法,调用动作必须置于最起始的位置。

不能在构造方法以外的任何方法内调用构造方法。

在一个构造方法内只能调用一个构造方法。
上述代码涉及到方法重载,即Java允许出现多个同名方法,只要参数不同就可以。后续章节会讲解。
 
作为参数传递
需要在某些完全分离的类中调用一个方法,并将当前对象的一个引用作为参数传递时。例如:

public class Demo{
 public static void main(String[] args){
  B b = new B(new A());
 }
}
 class A{
 public A(){
 new B(this).print(); // 匿名对象
 }
 public void print(){
 System.out.println("Hello from A!");
 }
}
class B{
  A a;
  public B(A a){
  this.a = a;
}
public void print() {
  a.print();
  System.out.println("Hello from B!");
  }
}


运行结果:

Hello from A!
Hello from B!


匿名对象就是没有名字的对象。如果对象只使用一次,就可以作为匿名对象,代码中 new B(this).print(); 等价于 ( new B(this) ).print();,先通过 new B(this) 创建一个没有名字的对象,再调用它的方法。
 
继续阅读 »
this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性。例如:

public class Demo{
public int x = 10;
public int y = 15;
public void sum(){
// 通过 this 点取成员变量
int z = this.x + this.y;
System.out.println("x + y = " + z);
}
public static void main(String[] args) {
Demo obj = new Demo();
obj.sum();
}
}


运行结果:

x + y = 25


上面的程序中,obj 是 Demo 类的一个实例,this 与 obj 等价,执行 int z = this.x + this.y;,就相当于执行 int z = obj.x + obj.y;。

注意:this 只有在类实例化后才有意义。
 
使用this区分同名变量
成员变量与方法内部的变量重名时,希望在方法内部调用成员变量,怎么办呢?这时候只能使用this,例如:

public class Demo{
    public String name;
    public int age;
  
    public Demo(String name, int age){
        this.name = name;
        this.age = age;
    }
  
    public void say(){
        System.out.println("这里是" + name + ",已经使用" + age + "年");
    }
  
    public static void main(String[] args) {
        Demo obj = new Demo("i码邦", 3);
        obj.say();
    }
}


运行结果:
这里是i码邦,已经使用3年
 
形参的作用域是整个方法体,是局部变量。在Demo()中,形参和成员变量重名,如果不使用this,访问到的就是局部变量name和age,而不是成员变量。在 say() 中,我们没有使用 this,因为成员变量的作用域是整个实例,当然也可以加上 this:

public void say(){
   System.out.println("这里是" + this.name + ",已经使用" + this.age + "年");
}


Java 默认将所有成员变量和成员方法与 this 关联在一起,因此使用 this 在某些情况下是多余的。
 
作为方法名来初始化对象
也就是相当于调用本类的其它构造方法,它必须作为构造方法的第一句。示例如下:

public class Demo{
public String name;
public int age;
public Demo(){
  this("i码邦", 3);
}
public Demo(String name, int age){
  this.name = name;
  this.age = age;
}
public void say(){
  System.out.println("这里是" + name + ",已经使用" + age + "年");
}
public static void main(String[] args) {
Demo obj = new Demo();
obj.say();
}
}


运行结果:
这里是i码邦,已经使用3年
值得注意的是:在构造方法中调用另一个构造方法,调用动作必须置于最起始的位置。

不能在构造方法以外的任何方法内调用构造方法。

在一个构造方法内只能调用一个构造方法。
上述代码涉及到方法重载,即Java允许出现多个同名方法,只要参数不同就可以。后续章节会讲解。
 
作为参数传递
需要在某些完全分离的类中调用一个方法,并将当前对象的一个引用作为参数传递时。例如:

public class Demo{
 public static void main(String[] args){
  B b = new B(new A());
 }
}
 class A{
 public A(){
 new B(this).print(); // 匿名对象
 }
 public void print(){
 System.out.println("Hello from A!");
 }
}
class B{
  A a;
  public B(A a){
  this.a = a;
}
public void print() {
  a.print();
  System.out.println("Hello from B!");
  }
}


运行结果:

Hello from A!
Hello from B!


匿名对象就是没有名字的对象。如果对象只使用一次,就可以作为匿名对象,代码中 new B(this).print(); 等价于 ( new B(this) ).print();,先通过 new B(this) 创建一个没有名字的对象,再调用它的方法。
 
收起阅读 »

【i码邦】java基础教程分享-16-Scanner

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。

下面是创建 Scanner 对象的基本语法:
Scanner s = new Scanner(System.in);
接下来我们演示一个最简单的的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据:

使用 next 方法:

ScannerDemo.java 文件代码:

import java.util.Scanner;
 public class ScannerDemo {
 public static void main(String[] args) {
   Scanner scan = new Scanner(System.in); // 从键盘接收数据
   //next方式接收字符串 
   System.out.println("next方式接收:");
   // 判断是否还有输入
   if(scan.hasNext()){
      String str1 = scan.next();
      System.out.println("输入的数据为:"+str1);
     }
   }
 }


 
执行以上程序输出结果为:

 next方式接收:
 runoob com
 输入的数据为:runoob


可以看到 com 字符串并未输出,接下来我们看 nextLine。
 
使用 nextLine 方法:

import java.util.Scanner;
 public class ScannerDemo {
   public static void main(String[] args) {
      Scanner scan = new Scanner(System.in); // 从键盘接收数据
     //nextLine方式接收字符串
     System.out.println("nextLine方式接收:");
     // 判断是否还有输入
     if(scan.hasNextLine()){
        String str2 = scan.nextLine();
        System.out.println("输入的数据为:"+str2);
     }
   }
 }


执行以上程序输出结果为:

nextLine方式接收:
runoob com 
输入的数据为:runoob com


可以看到 com 字符串输出。
 
next() 与 nextLine() 区别

next():
  1. 一定要读取到有效字符后才可以结束输入。
  2. 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  3. 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  4. next() 不能得到带有空格的字符串。


nextLine():
  1. 以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
  2. 可以获得空白。

 
如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取:

import java.util.Scanner;
 public class ScannerDemo {
 public static void main(String[] args) {
  Scanner scan = new Scanner(System.in); // 从键盘接收数据
  int i = 0 ;
  float f = 0.0f ;
   System.out.print("输入整数:");
  if(scan.hasNextInt()){
   // 判断输入的是否是整数
   i = scan.nextInt() ; // 接收整数
   System.out.println("整数数据:" + i) ;
   }else{
   // 输入错误的信息
   System.out.println("输入的不是整数!") ;
   }
   System.out.print("输入小数:");
 if(scan.hasNextFloat()){
   // 判断输入的是否是小数
   f = scan.nextFloat() ;
   // 接收小数
   System.out.println("小数数据:" + f) ;
   }else{
   // 输入错误的信息
   System.out.println("输入的不是小数!") ;
  } 
 }
}


执行以上程序输出结果为

 输入整数:12
 整数数据:12
 输入小数:1.2
 小数数据:1.2


以下实例我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果:

import java.util.Scanner;
class ScannerDemo {
  public static void main(String[] args) {
   Scanner scan = new Scanner(System.in);
   double sum = 0;
   int m = 0;
   while(scan.hasNextDouble()) {
   double x = scan.nextDouble();
   m = m + 1;
   sum = sum + x;
  }
  System.out.println(m+"个数的和为"+sum);
  System.out.println(m+"个数的平均值是"+(sum/m));
 }
}


执行以上程序输出结果为:

 12
 23
 15
 21.4
 end
 4个数的和为71.4
 4个数的平均值是17.85


继续阅读 »
java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。

下面是创建 Scanner 对象的基本语法:
Scanner s = new Scanner(System.in);
接下来我们演示一个最简单的的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据:

使用 next 方法:

ScannerDemo.java 文件代码:

import java.util.Scanner;
 public class ScannerDemo {
 public static void main(String[] args) {
   Scanner scan = new Scanner(System.in); // 从键盘接收数据
   //next方式接收字符串 
   System.out.println("next方式接收:");
   // 判断是否还有输入
   if(scan.hasNext()){
      String str1 = scan.next();
      System.out.println("输入的数据为:"+str1);
     }
   }
 }


 
执行以上程序输出结果为:

 next方式接收:
 runoob com
 输入的数据为:runoob


可以看到 com 字符串并未输出,接下来我们看 nextLine。
 
使用 nextLine 方法:

import java.util.Scanner;
 public class ScannerDemo {
   public static void main(String[] args) {
      Scanner scan = new Scanner(System.in); // 从键盘接收数据
     //nextLine方式接收字符串
     System.out.println("nextLine方式接收:");
     // 判断是否还有输入
     if(scan.hasNextLine()){
        String str2 = scan.nextLine();
        System.out.println("输入的数据为:"+str2);
     }
   }
 }


执行以上程序输出结果为:

nextLine方式接收:
runoob com 
输入的数据为:runoob com


可以看到 com 字符串输出。
 
next() 与 nextLine() 区别

next():
  1. 一定要读取到有效字符后才可以结束输入。
  2. 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  3. 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  4. next() 不能得到带有空格的字符串。


nextLine():
  1. 以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
  2. 可以获得空白。

 
如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取:

import java.util.Scanner;
 public class ScannerDemo {
 public static void main(String[] args) {
  Scanner scan = new Scanner(System.in); // 从键盘接收数据
  int i = 0 ;
  float f = 0.0f ;
   System.out.print("输入整数:");
  if(scan.hasNextInt()){
   // 判断输入的是否是整数
   i = scan.nextInt() ; // 接收整数
   System.out.println("整数数据:" + i) ;
   }else{
   // 输入错误的信息
   System.out.println("输入的不是整数!") ;
   }
   System.out.print("输入小数:");
 if(scan.hasNextFloat()){
   // 判断输入的是否是小数
   f = scan.nextFloat() ;
   // 接收小数
   System.out.println("小数数据:" + f) ;
   }else{
   // 输入错误的信息
   System.out.println("输入的不是小数!") ;
  } 
 }
}


执行以上程序输出结果为

 输入整数:12
 整数数据:12
 输入小数:1.2
 小数数据:1.2


以下实例我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果:

import java.util.Scanner;
class ScannerDemo {
  public static void main(String[] args) {
   Scanner scan = new Scanner(System.in);
   double sum = 0;
   int m = 0;
   while(scan.hasNextDouble()) {
   double x = scan.nextDouble();
   m = m + 1;
   sum = sum + x;
  }
  System.out.println(m+"个数的和为"+sum);
  System.out.println(m+"个数的平均值是"+(sum/m));
 }
}


执行以上程序输出结果为:

 12
 23
 15
 21.4
 end
 4个数的和为71.4
 4个数的平均值是17.85


收起阅读 »

【i码邦】java基础教程分享-15-数组

如果希望保存一组有相同类型的数据,可以使用数组。
 
数组的定义和内存分配
Java 中定义数组的语法有两种:
    type arrayName;
    type arrayName;
type 为Java中的任意数据类型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符,[ ] 指明该变量是一个数组类型变量。例如:

int demoArray;
int demoArray;


这两种形式没有区别,使用效果完全一样,读者可根据自己的编程习惯选择。

与C、C++不同,Java在定义数组时并不为数组元素分配内存,因此[ ]中无需指定数组元素的个数,即数组长度。而且对于如上定义的一个数组是不能访问它的任何元素的,我们必须要为它分配内存空间,这时要用到运算符new,其格式如下:
    arrayName=new type[arraySize];
其中,arraySize 为数组的长度,type 为数组的类型。如:

demoArray=new int[3];


为一个整型数组分配3个int 型整数所占据的内存空间。

通常,你可以在定义的同时分配空间,语法为:
    type arrayName = new type[arraySize];
例如:

int demoArray = new int[3];


 
数组的初始化
你可以在声明数组的同时进行初始化(静态初始化),也可以在声明以后进行初始化(动态初始化)。例如:

// 静态初始化
// 静态初始化的同时就为数组元素分配空间并赋值
int intArray = {1,2,3,4};
String stringArray = {"i码邦", "APP", "一切编程语言都是纸老虎"};
// 动态初始化
float floatArray = new float[3];
floatArray[0] = 1.0f;
floatArray[1] = 132.63f;
floatArray[2] = 100F;


 
数组引用
可以通过下标来引用数组:
    arrayName[index];
与C、C++不同,Java对数组元素要进行越界检查以保证安全性。
每个数组都有一个length属性来指明它的长度,例如 intArray.length 指明数组 intArray 的长度。
【示例】写一段代码,要求输入任意5个整数,输出它们的和。

import java.util.*;
public class Demo {
public static void main(String args){
int intArray = new int[5];
long total = 0;
int len = intArray.length;
// 给数组元素赋值
System.out.print("请输入" + len + "个整数,以空格为分隔:");
Scanner sc = new Scanner(System.in);
for(int i=0; i<len; i++){
intArray = sc.nextInt();
}
// 计算数组元素的和
for(int i=0; i<len; i++){
total += intArray;
}
System.out.println("所有数组元素的和为:" + total);
}
}



运行结果:
请输入5个整数,以空格为分隔:10 20 15 25 50
所有数组元素的和为:120
 
数组的遍历
实际开发中,经常需要遍历数组以获取数组中的每一个元素。最容易想到的方法是for循环,例如:

int arrayDemo = {1, 2, 4, 7, 9, 192, 100};
for(int i=0,len=arrayDemo.length; i<len; i++){
System.out.println(arrayDemo + ", ");
}



输出结果:
1, 2, 4, 7, 9, 192, 100,
 
不过,Java提供了”增强版“的for循环,专门用来遍历数组,语法为:

for( arrayType varName: arrayName ){
// Some Code
}



arrayType 为数组类型(也是数组元素的类型);varName 是用来保存当前元素的变量,每次循环它的值都会改变;arrayName 为数组名称。
 
每循环一次,就会获取数组中下一个元素的值,保存到 varName 变量,直到数组结束。即,第一次循环 varName 的值为第0个元素,第二次循环为第1个元素......例如:

int arrayDemo = {1, 2, 4, 7, 9, 192, 100};
for(int x: arrayDemo){
System.out.println(x + ", ");
}



输出结果与上面相同。

这种增强版的for循环也被称为”foreach循环“,它是普通for循环语句的特殊简化版。所有的foreach循环都可以被改写成for循环。

但是,如果你希望使用数组的索引,那么增强版的 for 循环无法做到。
 
二维数组
二维数组的声明、初始化和引用与一维数组相似:

int intArray[ ][ ] = { {1,2}, {2,3}, {4,5} };
int a[ ][ ] = new int[2][3];
a[0][0] = 12;
a[0][1] = 34;
// ......
a[1][2] = 93;



Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。例如:

int intArray[ ][ ] = { {1,2}, {2,3}, {3,4,5} };
int a[ ][ ] = new int[2][ ];
a[0] = new int[3];
a[1] = new int[5];



【示例】通过二维数组计算两个矩阵的乘积。

public class Demo {
public static void main(String args){
// 第一个矩阵(动态初始化一个二维数组)
int a = new int[2][3];
// 第二个矩阵(静态初始化一个二维数组)
int b = { {1,5,2,8}, {5,9,10,-3}, {2,7,-5,-18} };
// 结果矩阵
int c = new int[2][4];
// 初始化第一个矩阵
for(int i=0; i<2; i++)
for(int j=0; j<3 ;j++)
a[j] = (i+1) * (j+2);
// 计算矩阵乘积
for (int i=0; i<2; i++){
for (int j=0; j<4; j++){
c[j]=0;
for(int k=0; k<3; k++)
c[j] += a[k] * b[k][j];
}
}
// 输出结算结果
for(int i=0; i<2; i++){
for (int j=0; j<4; j++)
System.out.printf("%-5d", c[j]);
System.out.println();
}
}
}



运行结果:
25   65   14   -65 
50   130  28   -130
 
几点说明:
  • 上面讲的是静态数组。静态数组一旦被声明,它的容量就固定了,不容改变。所以在声明数组时,一定要考虑数组的最大容量,防止容量不够的现象。[list][*]如果想在运行程序时改变容量,就需要用到数组列表(ArrayList,也称动态数组)或向量(Vector)。[list][*]正是由于静态数组容量固定的缺点,实际开发中使用频率不高,被 ArrayList 或 Vector 代替,因为实际开发中经常需要向数组中添加或删除元素,而它的容量不好预估。

[/*]
[/list]
[/*]
[/list]
[i][i][i][i][i][i][i][/i][/i][/i][/i][/i][/i][/i]
继续阅读 »
如果希望保存一组有相同类型的数据,可以使用数组。
 
数组的定义和内存分配
Java 中定义数组的语法有两种:
    type arrayName;
    type arrayName;
type 为Java中的任意数据类型,包括基本类型和组合类型,arrayName为数组名,必须是一个合法的标识符,[ ] 指明该变量是一个数组类型变量。例如:

int demoArray;
int demoArray;


这两种形式没有区别,使用效果完全一样,读者可根据自己的编程习惯选择。

与C、C++不同,Java在定义数组时并不为数组元素分配内存,因此[ ]中无需指定数组元素的个数,即数组长度。而且对于如上定义的一个数组是不能访问它的任何元素的,我们必须要为它分配内存空间,这时要用到运算符new,其格式如下:
    arrayName=new type[arraySize];
其中,arraySize 为数组的长度,type 为数组的类型。如:

demoArray=new int[3];


为一个整型数组分配3个int 型整数所占据的内存空间。

通常,你可以在定义的同时分配空间,语法为:
    type arrayName = new type[arraySize];
例如:

int demoArray = new int[3];


 
数组的初始化
你可以在声明数组的同时进行初始化(静态初始化),也可以在声明以后进行初始化(动态初始化)。例如:

// 静态初始化
// 静态初始化的同时就为数组元素分配空间并赋值
int intArray = {1,2,3,4};
String stringArray = {"i码邦", "APP", "一切编程语言都是纸老虎"};
// 动态初始化
float floatArray = new float[3];
floatArray[0] = 1.0f;
floatArray[1] = 132.63f;
floatArray[2] = 100F;


 
数组引用
可以通过下标来引用数组:
    arrayName[index];
与C、C++不同,Java对数组元素要进行越界检查以保证安全性。
每个数组都有一个length属性来指明它的长度,例如 intArray.length 指明数组 intArray 的长度。
【示例】写一段代码,要求输入任意5个整数,输出它们的和。

import java.util.*;
public class Demo {
public static void main(String args){
int intArray = new int[5];
long total = 0;
int len = intArray.length;
// 给数组元素赋值
System.out.print("请输入" + len + "个整数,以空格为分隔:");
Scanner sc = new Scanner(System.in);
for(int i=0; i<len; i++){
intArray = sc.nextInt();
}
// 计算数组元素的和
for(int i=0; i<len; i++){
total += intArray;
}
System.out.println("所有数组元素的和为:" + total);
}
}



运行结果:
请输入5个整数,以空格为分隔:10 20 15 25 50
所有数组元素的和为:120
 
数组的遍历
实际开发中,经常需要遍历数组以获取数组中的每一个元素。最容易想到的方法是for循环,例如:

int arrayDemo = {1, 2, 4, 7, 9, 192, 100};
for(int i=0,len=arrayDemo.length; i<len; i++){
System.out.println(arrayDemo + ", ");
}



输出结果:
1, 2, 4, 7, 9, 192, 100,
 
不过,Java提供了”增强版“的for循环,专门用来遍历数组,语法为:

for( arrayType varName: arrayName ){
// Some Code
}



arrayType 为数组类型(也是数组元素的类型);varName 是用来保存当前元素的变量,每次循环它的值都会改变;arrayName 为数组名称。
 
每循环一次,就会获取数组中下一个元素的值,保存到 varName 变量,直到数组结束。即,第一次循环 varName 的值为第0个元素,第二次循环为第1个元素......例如:

int arrayDemo = {1, 2, 4, 7, 9, 192, 100};
for(int x: arrayDemo){
System.out.println(x + ", ");
}



输出结果与上面相同。

这种增强版的for循环也被称为”foreach循环“,它是普通for循环语句的特殊简化版。所有的foreach循环都可以被改写成for循环。

但是,如果你希望使用数组的索引,那么增强版的 for 循环无法做到。
 
二维数组
二维数组的声明、初始化和引用与一维数组相似:

int intArray[ ][ ] = { {1,2}, {2,3}, {4,5} };
int a[ ][ ] = new int[2][3];
a[0][0] = 12;
a[0][1] = 34;
// ......
a[1][2] = 93;



Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。例如:

int intArray[ ][ ] = { {1,2}, {2,3}, {3,4,5} };
int a[ ][ ] = new int[2][ ];
a[0] = new int[3];
a[1] = new int[5];



【示例】通过二维数组计算两个矩阵的乘积。

public class Demo {
public static void main(String args){
// 第一个矩阵(动态初始化一个二维数组)
int a = new int[2][3];
// 第二个矩阵(静态初始化一个二维数组)
int b = { {1,5,2,8}, {5,9,10,-3}, {2,7,-5,-18} };
// 结果矩阵
int c = new int[2][4];
// 初始化第一个矩阵
for(int i=0; i<2; i++)
for(int j=0; j<3 ;j++)
a[j] = (i+1) * (j+2);
// 计算矩阵乘积
for (int i=0; i<2; i++){
for (int j=0; j<4; j++){
c[j]=0;
for(int k=0; k<3; k++)
c[j] += a[k] * b[k][j];
}
}
// 输出结算结果
for(int i=0; i<2; i++){
for (int j=0; j<4; j++)
System.out.printf("%-5d", c[j]);
System.out.println();
}
}
}



运行结果:
25   65   14   -65 
50   130  28   -130
 
几点说明:
  • 上面讲的是静态数组。静态数组一旦被声明,它的容量就固定了,不容改变。所以在声明数组时,一定要考虑数组的最大容量,防止容量不够的现象。[list][*]如果想在运行程序时改变容量,就需要用到数组列表(ArrayList,也称动态数组)或向量(Vector)。[list][*]正是由于静态数组容量固定的缺点,实际开发中使用频率不高,被 ArrayList 或 Vector 代替,因为实际开发中经常需要向数组中添加或删除元素,而它的容量不好预估。

[/*]
[/list]
[/*]
[/list]
[i][i][i][i][i][i][i][/i][/i][/i][/i][/i][/i][/i] 收起阅读 »

【i码邦】java基础教程分享-14-变量的作用域

在Java中,变量的作用域分为四个级别:类级、对象实例级、方法级、块级。

类级变量又称全局级变量或静态变量,需要使用static关键字修饰,你可以与 C/C++ 中的 static 变量对比学习。类级变量在类定义后就已经存在,占用内存空间,可以通过类名来访问,不需要实例化。

对象实例级变量就是成员变量,实例化后才会分配内存空间,才能访问。

方法级变量就是在方法内部定义的变量,就是局部变量。

块级变量就是定义在一个块内部的变量,变量的生存周期就是这个块,出了这个块就消失了,比如 if、for 语句的块。块是指由大括号包围的代码,例如:

{
int age = 3;
String name = "www.weixueyuan.net";
// 正确,在块内部可以访问 age 和 name 变量
System.out.println( name + "已经" + age + "岁了");
}
// 错误,在块外部无法访问 age 和 name 变量
System.out.println( name + "已经" + age + "岁了");


说明:方法内部除了能访问方法级的变量,还可以访问类级和实例级的变量。
块内部能够访问类级、实例级变量,如果块被包含在方法内部,它还可以访问方法级的变量。
方法级和块级的变量必须被显示地初始化,否则不能访问。
 

public class Demo{
public static String name = "i码邦"; // 类级变量
public int i; // 对象实例级变量
  // 属性块,在类初始化属性时候运行
 {
  int j = 2;// 块级变量
 }
 public void test1() {
  int j = 3; // 方法级变量
  if(j == 3) {
  int k = 5; // 块级变量
 }
  // 这里不能访问块级变量,块级变量只能在块内部访问
  System.out.println("name=" + name + ", i=" + i + ", j=" + j);
}
public static void main(String[] args) {
  // 不创建对象,直接通过类名访问类级变量
  System.out.println(Demo.name);
  // 创建对象并访问它的方法
  Demo t = new Demo();
  t.test1();
 }
}


运行结果:
i码邦
name=i码邦, i=0, j=3
 
继续阅读 »
在Java中,变量的作用域分为四个级别:类级、对象实例级、方法级、块级。

类级变量又称全局级变量或静态变量,需要使用static关键字修饰,你可以与 C/C++ 中的 static 变量对比学习。类级变量在类定义后就已经存在,占用内存空间,可以通过类名来访问,不需要实例化。

对象实例级变量就是成员变量,实例化后才会分配内存空间,才能访问。

方法级变量就是在方法内部定义的变量,就是局部变量。

块级变量就是定义在一个块内部的变量,变量的生存周期就是这个块,出了这个块就消失了,比如 if、for 语句的块。块是指由大括号包围的代码,例如:

{
int age = 3;
String name = "www.weixueyuan.net";
// 正确,在块内部可以访问 age 和 name 变量
System.out.println( name + "已经" + age + "岁了");
}
// 错误,在块外部无法访问 age 和 name 变量
System.out.println( name + "已经" + age + "岁了");


说明:方法内部除了能访问方法级的变量,还可以访问类级和实例级的变量。
块内部能够访问类级、实例级变量,如果块被包含在方法内部,它还可以访问方法级的变量。
方法级和块级的变量必须被显示地初始化,否则不能访问。
 

public class Demo{
public static String name = "i码邦"; // 类级变量
public int i; // 对象实例级变量
  // 属性块,在类初始化属性时候运行
 {
  int j = 2;// 块级变量
 }
 public void test1() {
  int j = 3; // 方法级变量
  if(j == 3) {
  int k = 5; // 块级变量
 }
  // 这里不能访问块级变量,块级变量只能在块内部访问
  System.out.println("name=" + name + ", i=" + i + ", j=" + j);
}
public static void main(String[] args) {
  // 不创建对象,直接通过类名访问类级变量
  System.out.println(Demo.name);
  // 创建对象并访问它的方法
  Demo t = new Demo();
  t.test1();
 }
}


运行结果:
i码邦
name=i码邦, i=0, j=3
 
收起阅读 »

【i码邦】java基础教程分享-13- 分支结构

顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构。

Java 有两种分支结构:

if 语句
switch 语句


if 语句
一个 if 语句包含一个布尔表达式和一条或多条语句。
语法
if 语句的用语法如下:

if(布尔表达式) 
{
 //如果布尔表达式为true将执行的语句
 }


如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代码。
Test.java 文件代码:

public class Test {
 public static void main(String args[]){
   int x = 10; 
   if( x < 20 ){
     System.out.print("这是 if 语句");
   }
  }
}


以上代码编译运行结果如下:
这是 if 语句

if...else语句


if 语句后面可以跟 else 语句,当 if 语句的布尔表达式值为 false 时,else 语句块会被执行。
语法
if…else 的用法如下:

if(布尔表达式){
 //如果布尔表达式的值为true 
}
else{
 //如果布尔表达式的值为false
 }


实例
Test.java 文件代码:

public class Test {
 public static void main(String args[]){
 int x = 30;
 if( x < 20 ){
   System.out.print("这是 if 语句");
 }
 else{
  System.out.print("这是 else 语句");
  }
 }
}


以上代码编译运行结果如下:

这是 else 语句


if...else if...else 语句
if 语句后面可以跟 elseif…else 语句,这种语句可以检测到多种可能的情况。
使用 if,else if,else 语句的时候,需要注意下面几点:
  • if 语句至多有 1 个 else 语句,else 语句在所有的 elseif 语句之后。
  • if 语句可以有若干个 elseif 语句,它们必须在 else 语句之前。
  • 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。

语法
if...else 语法格式如下:

if(布尔表达式 1){
 //如果布尔表达式 1的值为true执行代码
 }else if(布尔表达式 2){
 //如果布尔表达式 2的值为true执行代码
 }else if(布尔表达式 3){
 //如果布尔表达式 3的值为true执行代码
 }else {
 //如果以上布尔表达式都不为true执行代码
 }


Test.java 文件代码:

public class Test {
 public static void main(String args[]){
 int x = 30;
 if( x == 10 ){
   System.out.print("Value of X is 10");
 }else if( x == 20 ){
   System.out.print("Value of X is 20");
 }else if( x == 30 ){
   System.out.print("Value of X is 30");
 }else{
   System.out.print("这是 else 语句");
   }
  }
 }


以上代码编译运行结果如下:

Value of X is 30


嵌套的 if…else 语句
使用嵌套的 if…else 语句是合法的。也就是说你可以在另一个 if 或者 elseif 语句中使用 if 或者 elseif 语句。
语法
嵌套的 if…else 语法格式如下:

if(布尔表达式 1){
 ////如果布尔表达式 1的值为true执行代码
   if(布尔表达式 2){
   ////如果布尔表达式 2的值为true执行代码
   }
 }


你可以像 if 语句一样嵌套 else if...else。
 
实例
Test.java 文件代码:

public class Test {
  public static void main(String args[]){
     int x = 30;
     int y = 10;
     if( x == 30 ){
       if( y == 10 ){
           System.out.print("X = 30 and Y = 10");
       }
     }
   }
 }


以上代码编译运行结果如下:
X = 30 and Y = 10

switch 语句
switch 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
语法
switch 语法格式如下:

switch(expression){
 case value : //语句
 break; //可选
 case value : //语句
 break; //可选
 //你可以有任意数量的case语句
 default : //可选
 //语句
 }


switch 语句有如下规则:
  • switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串类型了,同时 case 标签必须为字符串常量或字面量。
  • switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
  • case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
  • 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
  • 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
  • switch 语句可以包含一个 default 分支,该分支必须是 switch 语句的最后一个分支。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。

实例
Test.java 文件代码:

public class Test {
 public static void main(String args[]){
  char grade = 'C';
   switch(grade) {
     case 'A' : System.out.println("优秀");
     break;
     case 'B' :
     case 'C' : System.out.println("良好");
     break;
     case 'D' : System.out.println("及格");
     case 'F' : System.out.println("你需要再努力努力");
     break;
    default : System.out.println("未知等级");
 }
 System.out.println("你的等级是 " + grade);
 }
}


以上代码编译运行结果如下:

良好
你的等级是 C
 


继续阅读 »
顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构。

Java 有两种分支结构:

if 语句
switch 语句


if 语句
一个 if 语句包含一个布尔表达式和一条或多条语句。
语法
if 语句的用语法如下:

if(布尔表达式) 
{
 //如果布尔表达式为true将执行的语句
 }


如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代码。
Test.java 文件代码:

public class Test {
 public static void main(String args[]){
   int x = 10; 
   if( x < 20 ){
     System.out.print("这是 if 语句");
   }
  }
}


以上代码编译运行结果如下:
这是 if 语句

if...else语句


if 语句后面可以跟 else 语句,当 if 语句的布尔表达式值为 false 时,else 语句块会被执行。
语法
if…else 的用法如下:

if(布尔表达式){
 //如果布尔表达式的值为true 
}
else{
 //如果布尔表达式的值为false
 }


实例
Test.java 文件代码:

public class Test {
 public static void main(String args[]){
 int x = 30;
 if( x < 20 ){
   System.out.print("这是 if 语句");
 }
 else{
  System.out.print("这是 else 语句");
  }
 }
}


以上代码编译运行结果如下:

这是 else 语句


if...else if...else 语句
if 语句后面可以跟 elseif…else 语句,这种语句可以检测到多种可能的情况。
使用 if,else if,else 语句的时候,需要注意下面几点:
  • if 语句至多有 1 个 else 语句,else 语句在所有的 elseif 语句之后。
  • if 语句可以有若干个 elseif 语句,它们必须在 else 语句之前。
  • 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。

语法
if...else 语法格式如下:

if(布尔表达式 1){
 //如果布尔表达式 1的值为true执行代码
 }else if(布尔表达式 2){
 //如果布尔表达式 2的值为true执行代码
 }else if(布尔表达式 3){
 //如果布尔表达式 3的值为true执行代码
 }else {
 //如果以上布尔表达式都不为true执行代码
 }


Test.java 文件代码:

public class Test {
 public static void main(String args[]){
 int x = 30;
 if( x == 10 ){
   System.out.print("Value of X is 10");
 }else if( x == 20 ){
   System.out.print("Value of X is 20");
 }else if( x == 30 ){
   System.out.print("Value of X is 30");
 }else{
   System.out.print("这是 else 语句");
   }
  }
 }


以上代码编译运行结果如下:

Value of X is 30


嵌套的 if…else 语句
使用嵌套的 if…else 语句是合法的。也就是说你可以在另一个 if 或者 elseif 语句中使用 if 或者 elseif 语句。
语法
嵌套的 if…else 语法格式如下:

if(布尔表达式 1){
 ////如果布尔表达式 1的值为true执行代码
   if(布尔表达式 2){
   ////如果布尔表达式 2的值为true执行代码
   }
 }


你可以像 if 语句一样嵌套 else if...else。
 
实例
Test.java 文件代码:

public class Test {
  public static void main(String args[]){
     int x = 30;
     int y = 10;
     if( x == 30 ){
       if( y == 10 ){
           System.out.print("X = 30 and Y = 10");
       }
     }
   }
 }


以上代码编译运行结果如下:
X = 30 and Y = 10

switch 语句
switch 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
语法
switch 语法格式如下:

switch(expression){
 case value : //语句
 break; //可选
 case value : //语句
 break; //可选
 //你可以有任意数量的case语句
 default : //可选
 //语句
 }


switch 语句有如下规则:
  • switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串类型了,同时 case 标签必须为字符串常量或字面量。
  • switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
  • case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
  • 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
  • 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
  • switch 语句可以包含一个 default 分支,该分支必须是 switch 语句的最后一个分支。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。

实例
Test.java 文件代码:

public class Test {
 public static void main(String args[]){
  char grade = 'C';
   switch(grade) {
     case 'A' : System.out.println("优秀");
     break;
     case 'B' :
     case 'C' : System.out.println("良好");
     break;
     case 'D' : System.out.println("及格");
     case 'F' : System.out.println("你需要再努力努力");
     break;
    default : System.out.println("未知等级");
 }
 System.out.println("你的等级是 " + grade);
 }
}


以上代码编译运行结果如下:

良好
你的等级是 C
 


收起阅读 »

【i码邦】java基础教程分享-12-循环控制

顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,,就需要使用循环结构。
 
Java中有三种主要的循环结构:
  • while 循环
  • do…while 循环
  • for 循环

在Java5中引入了一种主要用于数组的增强型for循环。
 
while 循环
while是最基本的循环,它的结构为:

  while( 布尔表达式 ) 
  {
      //循环内容 
  }


只要布尔表达式为 true,循环体会一直执行下去。

实例
Test.java 文件代码:

public class Test 
{
 public static void main(String args)
 {
   int x = 10;
   while( x < 20 ) 
   {
      System.out.print("value of x : " + x );
      x++;
      System.out.print("\n");
   }
 }
}


以上实例编译运行结果如下:

value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19


do…while 循环
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。

do 
{
 //代码语句
 }
while(布尔表达式);


注意:布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。
实例
Test.java 文件代码:

public class Test
 {
   public static void main(String args)
   {
      int x = 10;
      do
      {
        System.out.print("value of x : " + x );
        x++;
        System.out.print("\n");
      }
    while( x < 20 );
  }
}



以上实例编译运行结果如下:

value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19


for循环
虽然所有循环结构都可以用 while 或者 do...while表示,但 Java 提供了另一种语句 —— for 循环,使一些循环结构变得更加简单。
for循环执行的次数是在执行前就确定的。
语法格式如下:

for(初始化; 布尔表达式; 更新)
 {
 //代码语句
 }


关于 for 循环有以下几点说明:
  • 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
  • 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
  • 执行一次循环后,更新循环控制变量。
  • 再次检测布尔表达式。循环执行上面的过程。

 
Java 增强 for 循环
Java5 引入了一种主要用于数组的增强型 for 循环。
Java 增强 for 循环语法格式如下:

for(声明语句 : 表达式) 
{
 //代码句子
 }


声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
实例
Test.java 文件代码:

public class Test 
{
 public static void main(String args)
{
 int numbers = {10, 20, 30, 40, 50};
 for(int x : numbers )
 {
    System.out.print( x );
    System.out.print(",");
 }
 System.out.print("\n");
 String names ={"James", "Larry", "Tom", "Lacy"};
 for( String name : names ) 
 {
   System.out.print( name );
   System.out.print(",");
  }
 }
}


以上实例编译运行结果如下:

10,20,30,40,50,
James,Larry,Tom,Lacy,


break 关键字
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
break 跳出最里层的循环,并且继续执行该循环下面的语句。
语法
break 的用法很简单,就是循环结构中的一条语句:

break;


实例
Test.java 文件代码:

public class Test 
{
 public static void main(String args)
 {
   int numbers = {10, 20, 30, 40, 50};
   for(int x : numbers ) 
   {
        // x 等于 30 时跳出循环
      if( x == 30 )
     {
        break;
     }
   System.out.print( x );
   System.out.print("\n");
  }
  }
 }


以上实例编译运行结果如下:

10
20


continue 关键字
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
语法
continue 就是循环体中一条简单的语句:

continue;


Test.java 文件代码:

public class Test 
{
 public static void main(String args)
 {
 int numbers = {10, 20, 30, 40, 50};
   for(int x : numbers )
   {
     if( x == 30 ) 
    {
     continue;
     }
     System.out.print( x );
     System.out.print("\n");
    }
   }
 }


以上实例编译运行结果如下:

 10
 20
 40
 50


继续阅读 »
顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,,就需要使用循环结构。
 
Java中有三种主要的循环结构:
  • while 循环
  • do…while 循环
  • for 循环

在Java5中引入了一种主要用于数组的增强型for循环。
 
while 循环
while是最基本的循环,它的结构为:

  while( 布尔表达式 ) 
  {
      //循环内容 
  }


只要布尔表达式为 true,循环体会一直执行下去。

实例
Test.java 文件代码:

public class Test 
{
 public static void main(String args)
 {
   int x = 10;
   while( x < 20 ) 
   {
      System.out.print("value of x : " + x );
      x++;
      System.out.print("\n");
   }
 }
}


以上实例编译运行结果如下:

value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19


do…while 循环
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。

do 
{
 //代码语句
 }
while(布尔表达式);


注意:布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。
实例
Test.java 文件代码:

public class Test
 {
   public static void main(String args)
   {
      int x = 10;
      do
      {
        System.out.print("value of x : " + x );
        x++;
        System.out.print("\n");
      }
    while( x < 20 );
  }
}



以上实例编译运行结果如下:

value of x : 10
value of x : 11
value of x : 12
value of x : 13
value of x : 14
value of x : 15
value of x : 16
value of x : 17
value of x : 18
value of x : 19


for循环
虽然所有循环结构都可以用 while 或者 do...while表示,但 Java 提供了另一种语句 —— for 循环,使一些循环结构变得更加简单。
for循环执行的次数是在执行前就确定的。
语法格式如下:

for(初始化; 布尔表达式; 更新)
 {
 //代码语句
 }


关于 for 循环有以下几点说明:
  • 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
  • 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
  • 执行一次循环后,更新循环控制变量。
  • 再次检测布尔表达式。循环执行上面的过程。

 
Java 增强 for 循环
Java5 引入了一种主要用于数组的增强型 for 循环。
Java 增强 for 循环语法格式如下:

for(声明语句 : 表达式) 
{
 //代码句子
 }


声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
实例
Test.java 文件代码:

public class Test 
{
 public static void main(String args)
{
 int numbers = {10, 20, 30, 40, 50};
 for(int x : numbers )
 {
    System.out.print( x );
    System.out.print(",");
 }
 System.out.print("\n");
 String names ={"James", "Larry", "Tom", "Lacy"};
 for( String name : names ) 
 {
   System.out.print( name );
   System.out.print(",");
  }
 }
}


以上实例编译运行结果如下:

10,20,30,40,50,
James,Larry,Tom,Lacy,


break 关键字
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
break 跳出最里层的循环,并且继续执行该循环下面的语句。
语法
break 的用法很简单,就是循环结构中的一条语句:

break;


实例
Test.java 文件代码:

public class Test 
{
 public static void main(String args)
 {
   int numbers = {10, 20, 30, 40, 50};
   for(int x : numbers ) 
   {
        // x 等于 30 时跳出循环
      if( x == 30 )
     {
        break;
     }
   System.out.print( x );
   System.out.print("\n");
  }
  }
 }


以上实例编译运行结果如下:

10
20


continue 关键字
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
语法
continue 就是循环体中一条简单的语句:

continue;


Test.java 文件代码:

public class Test 
{
 public static void main(String args)
 {
 int numbers = {10, 20, 30, 40, 50};
   for(int x : numbers )
   {
     if( x == 30 ) 
    {
     continue;
     }
     System.out.print( x );
     System.out.print("\n");
    }
   }
 }


以上实例编译运行结果如下:

 10
 20
 40
 50


收起阅读 »

【i码邦】java基础教程分享-11-修饰符

Java语言提供了很多修饰符,主要分为以下两类:

访问修饰符
非访问修饰符


修饰符用来定义类、方法或者变量,通常放在语句的最前端。
我们通过下面的例子来说明:
public class className {
   // ... 
}
 private boolean myFlag;
 static final double weeks = 9.5;
 protected static final int BOXWIDTH = 42;
 public static void main(String arguments) {
 // 方法体
 }
 
访问控制修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。
Java支持4种不同的访问权限。
  • 默认的,也称为 default,在同一包内可见,不使用任何修饰符。
  • 私有的,以 private 修饰符指定,在同一类内可见。
  • 共有的,以 public 修饰符指定,对所有类可见。
  • 受保护的,以 protected 修饰符指定,对同一包内的类和所有子类可见。


我们可以可以通过以下表来说明访问权限:

2017060701.png

 
默认访问修饰符-不使用任何关键字
使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public。

如下例所示,变量和方法的声明可以不使用任何修饰符。

 String version = "1.5.1";
 boolean processOrder() {
 return true;
 }


私有访问修饰符-private

私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。
声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。
Private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。
下面的类使用了私有访问修饰符:

public class Logger {
 private String format;
 public String getFormat() {
   return this.format;
 }
 public void setFormat(String format) {
   this.format = format;
 }
}


实例中,Logger 类中的 format 变量为私有变量,所以其他类不能直接得到和设置该变量的值。为了使其他类能够操作该变量,定义了两个 public 方法:getFormat() (返回 format的值)和 setFormat(String)(设置 format 的值)
 
公有访问修饰符-public
被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。
如果几个相互访问的 public 类分布在不同的包中,则需要导入相应 public 类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。
以下函数使用了公有访问控制:

public static void main(String arguments) {
 // ...
 }


Java 程序的 main() 方法必须设置成公有的,否则,Java 解释器将不能运行该类。
 
受保护的访问修饰符-protected
被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问,也能够被不同包中的子类访问。
protected 访问修饰符不能修饰类和接口,方法和成员变量能够声明为 protected,但是接口的成员变量和成员方法不能声明为 protected。
子类能访问 protected 修饰符声明的方法和变量,这样就能保护不相关的类使用这些方法和变量。
下面的父类使用了 protected 访问修饰符,子类重写了父类的 openSpeaker() 方法。

class AudioPlayer {
 protected boolean openSpeaker(Speaker sp) {
   // 实现细节
 }
}
 class StreamingAudioPlayer extends AudioPlayer {
   boolean openSpeaker(Speaker sp) {
     // 实现细节
 }
}


如果把 openSpeaker() 方法声明为 private,那么除了 AudioPlayer 之外的类将不能访问该方法。如果把 openSpeaker() 声明为 public,那么所有的类都能够访问该方法。如果我们只想让该方法对其所在类的子类可见,则将该方法声明为 protected。
 
访问控制和继承
请注意以下方法继承的规则:
  1. 父类中声明为 public 的方法在子类中也必须为 public。
  2. 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
  3. 父类中声明为 private 的方法,不能够被继承。

 
非访问修饰符
为了实现一些其他的功能,Java 也提供了许多非访问修饰符。
  • static 修饰符,用来创建类方法和类变量。
  • final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
  • abstract 修饰符,用来创建抽象类和抽象方法。
  • synchronized 和 volatile 修饰符,主要用于线程的编程。
  • static 修饰符

 
  1. 静态变量:static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
  2. 静态方法:static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。


对类变量和方法的访问可以直接使用 classname.variablename 和 classname.methodname 的方式访问。
如下例所示,static修饰符用来创建类方法和类变量。

public class InstanceCounter {
  private static int numInstances = 0;
   protected static int getCount() {
     return numInstances;
   }
   private static void addInstance() {
     numInstances++;
   }
   InstanceCounter() {
     InstanceCounter.addInstance();
 }
 public static void main(String arguments) {
   System.out.println("Starting with " + InstanceCounter.getCount() + " instances");
   for (int i = 0; i < 500; ++i){
      new InstanceCounter();
   }
   System.out.println("Created " + InstanceCounter.getCount() + " instances");
 }
}


以上实例运行编辑结果如下:

Started with 0 instances
Created 500 instances



final 修饰符
final 变量:
final 变量能被显式地初始化并且只能初始化一次。被声明为 final 的对象的引用不能指向不同的对象。但是 final 对象里的数据可以被改变。也就是说 final 对象的引用不能改变,但是里面的值可以改变。
final 修饰符通常和 static 修饰符一起使用来创建类常量。

public class Test{
 final int value = 10;
 // 下面是声明常量的实例
 public static final int BOXWIDTH = 6;
 static final String TITLE = "Manager";
 public void changeValue(){
   value = 12;   //将输出一个错误
 }
}


 
final 方法
类中的 final 方法可以被子类继承,但是不能被子类修改。
声明 final 方法的主要目的是防止该方法的内容被修改。
如下所示,使用 final 修饰符声明方法。

public class Test{
  public final void changeName(){
    // 方法体
  }
 }


 
final 类
final 类不能被继承,没有类能够继承 final 类的任何特性。
public final class Test {
 // 类体
 }
 
abstract 修饰符
抽象类:
抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。
抽象类可以包含抽象方法和非抽象方法。

abstract class Caravan{
   private double price;
   private String model;
   private String year;
   public abstract void goFast();
   //抽象方法
   public abstract void changeColor();
 }


抽象方法
抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。
抽象方法不能被声明成 final 和 static。
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。
抽象方法的声明以分号结尾,例如:public abstract sample();。

public abstract class SuperClass{
 abstract void m(); //抽象方法
 }
 class SubClass extends SuperClass{
   //实现抽象方法
   void m(){
     .........
  }
 }


synchronized 修饰符
synchronized 关键字声明的方法同一时间只能被一个线程访问。synchronized 修饰符可以应用于四个访问修饰符。

public synchronized void showDetails(){
  .......
 }


transient 修饰符
序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。
该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
 public transient int limit = 55; // 不会持久化
 public int b; // 持久化
 
volatile 修饰符
volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
一个 volatile 对象引用可能是 null。

public class MyRunnable implements Runnable {
   private volatile boolean active;
   public void run() {
     active = true;
     while (active) // 第一行
     {
        // 代码
     }
 }
 public void stop() {
    active = false; // 第二行
  }
}


通常情况下,在一个线程调用 run() 方法(在 Runnable 开启的线程),在另一个线程调用 stop() 方法。 如果 第一行 中缓冲区的 active 值被使用,那么在 第二行 的 active 值为 false 时循环不会停止。
但是以上代码中我们使用了 volatile 修饰 active,所以该循环会停止。
 
===========笔记总结==================
JAVA 的类有 2 种访问权限: public、默认。
而方法和变量有 4 种:public、默认、protected、private。
其中默认访问权限和 protected 很相似,有着细微的差别。
 public 意味着任何地方的其他类都能访问。
 默认则是同一个包的类可以访问。
 protected 表示同一个包的类可以访问,其他的包的该类的子类也可以访问。
 private 表示只有自己类能访问。
继续阅读 »
Java语言提供了很多修饰符,主要分为以下两类:

访问修饰符
非访问修饰符


修饰符用来定义类、方法或者变量,通常放在语句的最前端。
我们通过下面的例子来说明:
public class className {
   // ... 
}
 private boolean myFlag;
 static final double weeks = 9.5;
 protected static final int BOXWIDTH = 42;
 public static void main(String arguments) {
 // 方法体
 }
 
访问控制修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。
Java支持4种不同的访问权限。
  • 默认的,也称为 default,在同一包内可见,不使用任何修饰符。
  • 私有的,以 private 修饰符指定,在同一类内可见。
  • 共有的,以 public 修饰符指定,对所有类可见。
  • 受保护的,以 protected 修饰符指定,对同一包内的类和所有子类可见。


我们可以可以通过以下表来说明访问权限:

2017060701.png

 
默认访问修饰符-不使用任何关键字
使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public。

如下例所示,变量和方法的声明可以不使用任何修饰符。

 String version = "1.5.1";
 boolean processOrder() {
 return true;
 }


私有访问修饰符-private

私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。
声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。
Private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。
下面的类使用了私有访问修饰符:

public class Logger {
 private String format;
 public String getFormat() {
   return this.format;
 }
 public void setFormat(String format) {
   this.format = format;
 }
}


实例中,Logger 类中的 format 变量为私有变量,所以其他类不能直接得到和设置该变量的值。为了使其他类能够操作该变量,定义了两个 public 方法:getFormat() (返回 format的值)和 setFormat(String)(设置 format 的值)
 
公有访问修饰符-public
被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。
如果几个相互访问的 public 类分布在不同的包中,则需要导入相应 public 类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。
以下函数使用了公有访问控制:

public static void main(String arguments) {
 // ...
 }


Java 程序的 main() 方法必须设置成公有的,否则,Java 解释器将不能运行该类。
 
受保护的访问修饰符-protected
被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问,也能够被不同包中的子类访问。
protected 访问修饰符不能修饰类和接口,方法和成员变量能够声明为 protected,但是接口的成员变量和成员方法不能声明为 protected。
子类能访问 protected 修饰符声明的方法和变量,这样就能保护不相关的类使用这些方法和变量。
下面的父类使用了 protected 访问修饰符,子类重写了父类的 openSpeaker() 方法。

class AudioPlayer {
 protected boolean openSpeaker(Speaker sp) {
   // 实现细节
 }
}
 class StreamingAudioPlayer extends AudioPlayer {
   boolean openSpeaker(Speaker sp) {
     // 实现细节
 }
}


如果把 openSpeaker() 方法声明为 private,那么除了 AudioPlayer 之外的类将不能访问该方法。如果把 openSpeaker() 声明为 public,那么所有的类都能够访问该方法。如果我们只想让该方法对其所在类的子类可见,则将该方法声明为 protected。
 
访问控制和继承
请注意以下方法继承的规则:
  1. 父类中声明为 public 的方法在子类中也必须为 public。
  2. 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
  3. 父类中声明为 private 的方法,不能够被继承。

 
非访问修饰符
为了实现一些其他的功能,Java 也提供了许多非访问修饰符。
  • static 修饰符,用来创建类方法和类变量。
  • final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
  • abstract 修饰符,用来创建抽象类和抽象方法。
  • synchronized 和 volatile 修饰符,主要用于线程的编程。
  • static 修饰符

 
  1. 静态变量:static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
  2. 静态方法:static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。


对类变量和方法的访问可以直接使用 classname.variablename 和 classname.methodname 的方式访问。
如下例所示,static修饰符用来创建类方法和类变量。

public class InstanceCounter {
  private static int numInstances = 0;
   protected static int getCount() {
     return numInstances;
   }
   private static void addInstance() {
     numInstances++;
   }
   InstanceCounter() {
     InstanceCounter.addInstance();
 }
 public static void main(String arguments) {
   System.out.println("Starting with " + InstanceCounter.getCount() + " instances");
   for (int i = 0; i < 500; ++i){
      new InstanceCounter();
   }
   System.out.println("Created " + InstanceCounter.getCount() + " instances");
 }
}


以上实例运行编辑结果如下:

Started with 0 instances
Created 500 instances



final 修饰符
final 变量:
final 变量能被显式地初始化并且只能初始化一次。被声明为 final 的对象的引用不能指向不同的对象。但是 final 对象里的数据可以被改变。也就是说 final 对象的引用不能改变,但是里面的值可以改变。
final 修饰符通常和 static 修饰符一起使用来创建类常量。

public class Test{
 final int value = 10;
 // 下面是声明常量的实例
 public static final int BOXWIDTH = 6;
 static final String TITLE = "Manager";
 public void changeValue(){
   value = 12;   //将输出一个错误
 }
}


 
final 方法
类中的 final 方法可以被子类继承,但是不能被子类修改。
声明 final 方法的主要目的是防止该方法的内容被修改。
如下所示,使用 final 修饰符声明方法。

public class Test{
  public final void changeName(){
    // 方法体
  }
 }


 
final 类
final 类不能被继承,没有类能够继承 final 类的任何特性。
public final class Test {
 // 类体
 }
 
abstract 修饰符
抽象类:
抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。
抽象类可以包含抽象方法和非抽象方法。

abstract class Caravan{
   private double price;
   private String model;
   private String year;
   public abstract void goFast();
   //抽象方法
   public abstract void changeColor();
 }


抽象方法
抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。
抽象方法不能被声明成 final 和 static。
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。
抽象方法的声明以分号结尾,例如:public abstract sample();。

public abstract class SuperClass{
 abstract void m(); //抽象方法
 }
 class SubClass extends SuperClass{
   //实现抽象方法
   void m(){
     .........
  }
 }


synchronized 修饰符
synchronized 关键字声明的方法同一时间只能被一个线程访问。synchronized 修饰符可以应用于四个访问修饰符。

public synchronized void showDetails(){
  .......
 }


transient 修饰符
序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。
该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
 public transient int limit = 55; // 不会持久化
 public int b; // 持久化
 
volatile 修饰符
volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
一个 volatile 对象引用可能是 null。

public class MyRunnable implements Runnable {
   private volatile boolean active;
   public void run() {
     active = true;
     while (active) // 第一行
     {
        // 代码
     }
 }
 public void stop() {
    active = false; // 第二行
  }
}


通常情况下,在一个线程调用 run() 方法(在 Runnable 开启的线程),在另一个线程调用 stop() 方法。 如果 第一行 中缓冲区的 active 值被使用,那么在 第二行 的 active 值为 false 时循环不会停止。
但是以上代码中我们使用了 volatile 修饰 active,所以该循环会停止。
 
===========笔记总结==================
JAVA 的类有 2 种访问权限: public、默认。
而方法和变量有 4 种:public、默认、protected、private。
其中默认访问权限和 protected 很相似,有着细微的差别。
 public 意味着任何地方的其他类都能访问。
 默认则是同一个包的类可以访问。
 protected 表示同一个包的类可以访问,其他的包的该类的子类也可以访问。
 private 表示只有自己类能访问。
收起阅读 »

最近很火的一首小诗:【i码邦】邦友共勉


最近很火的一首小诗:

纽约时间比加州时间早三个小时,
New York is 3 hours ahead of California,

但加州时间并没有变慢。
but it does not make California slow.

有人22岁就毕业了,
Someone graduated at the age of 22,

但等了五年才找到好的工作!
but waited 5 years before securing a good job!

有人25岁就当上CEO,
Someone became a CEO at 25,

却在50岁去世。
and died at 50.

也有人迟到50岁才当上CEO,
While another became a CEO at 50,

然后活到90岁。
and lived to 90 years.

有人依然单身,
Someone is still single,

同时也有人已婚。
while someone else got married.

奥巴马55岁就退休,
Obama retires at 55,

川普70岁才开始当总统。
but Trump starts at 70.

世上每个人本来就有自己的发展时区。
Absolutely everyone in this world works based on their Time Zone.

身边有些人看似走在你前面,
People around you might seem to go ahead of you,

也有人看似走在你后面。
some might seem to be behind you.

但其实每个人在自己的时区有自己的步程。
But everyone is running their own RACE, in their own TIME.

不用嫉妒或嘲笑他们。
Don’t envy them or mock them.

他们都在自己的时区里,你也是!
They are in their TIME ZONE, and you are in yours!

生命就是等待正确的行动时机。
Life is about waiting for the right moment to act.

所以,放轻松。
So, RELAX.

你没有落后。
You’re not LATE.

你没有领先。
You’re not EARLY.

在命运为你安排的属于自己的时区里,一切都准时。
You are very much ON TIME, and in your TIME ZONE Destiny set up for yo
 
继续阅读 »

最近很火的一首小诗:

纽约时间比加州时间早三个小时,
New York is 3 hours ahead of California,

但加州时间并没有变慢。
but it does not make California slow.

有人22岁就毕业了,
Someone graduated at the age of 22,

但等了五年才找到好的工作!
but waited 5 years before securing a good job!

有人25岁就当上CEO,
Someone became a CEO at 25,

却在50岁去世。
and died at 50.

也有人迟到50岁才当上CEO,
While another became a CEO at 50,

然后活到90岁。
and lived to 90 years.

有人依然单身,
Someone is still single,

同时也有人已婚。
while someone else got married.

奥巴马55岁就退休,
Obama retires at 55,

川普70岁才开始当总统。
but Trump starts at 70.

世上每个人本来就有自己的发展时区。
Absolutely everyone in this world works based on their Time Zone.

身边有些人看似走在你前面,
People around you might seem to go ahead of you,

也有人看似走在你后面。
some might seem to be behind you.

但其实每个人在自己的时区有自己的步程。
But everyone is running their own RACE, in their own TIME.

不用嫉妒或嘲笑他们。
Don’t envy them or mock them.

他们都在自己的时区里,你也是!
They are in their TIME ZONE, and you are in yours!

生命就是等待正确的行动时机。
Life is about waiting for the right moment to act.

所以,放轻松。
So, RELAX.

你没有落后。
You’re not LATE.

你没有领先。
You’re not EARLY.

在命运为你安排的属于自己的时区里,一切都准时。
You are very much ON TIME, and in your TIME ZONE Destiny set up for yo
  收起阅读 »

【i码邦】java基础教程分享-10-运算符

数学运算符

数学运算,结果为一个数值。

+ 加法: 1 + 2
- 减法: 4 - 3.4
* 乘法: 7 * 1.5
/ 除法: 3.5 / 7
% 取余: 7 % 2
++ 自增: 3++
-- 自减: 3--


 
关系运算符
关系运算符,结果为一个布尔值

> 大于: a > 4.2
>= 大于等于: 3.4 >= b
< 小于: 1.5 < 9
<= 小于等于: 6 <= 1
== 等于: 2 == 2
!= 不等于: 2 != 2
&& 与 :true && false
|| 或 :(3 > 1) || (2 == 1)
! 非: !true
 


 
位运算符
位运算符对整数的二进制形式逐位进行逻辑运算,得到一个整数。

& 与: 1 & 4
| 或: 2 | 5
^ 异或: 2 ^ 3
~ 非: ~5
<< 左移: 5 << 3
>> 右移: 6 >> 1


 
条件运算符
Java中有一个条件运算符(三目运算符):
    condition ? x1 : x2
condition为一个boolean值。根据condition,取x1或x2的值。
 
关于运算符的一个综合举例:

public class Demo {
public static void main(String[] args){
int a=10;
int b=10;
int x=10;
int y=21;
int z=10;
System.out.println("后自加 a=" + (a++));
System.out.println("a的值 a=" + a);
System.out.println("前自加 b=" + (++b));
System.out.println("---------------------");
System.out.println("说 x>y,对吗?" + (x>y));
System.out.println("认为 x>y 并且 x<y,对吗?" + ( (x>y) && (x<y) ));
System.out.println("认为 x>=y 或者 x==y,对吗?" + ( (x>=y) || (x==y) ));
System.out.println("认为 x<y 或者 x=z,对吗?" + ( (x<y) || (x==z) ));
System.out.println("---------------------");
System.out.println("a&x 的结果是:" + (a&x));
System.out.println("a|x 的结果是:" + (a|x));
System.out.println("y^z 的结果是:" + (y^z));
System.out.println("---------------------");
System.out.println("a 左移2位的结果是:" + (a<<2));
System.out.println("y 右移3位的结果是:" + (y>>3));
}
}


运行结果:
后自加 a=10
a的值 a=11
前自加 b=11
---------------------
说 x>y,对吗?false
认为 x>y 并且 x<y,对吗?false
认为 x>=y 或者 x==y,对吗?false
认为 x<y 或者 x=z,对吗?true
---------------------
a&x 的结果是:10
a|x 的结果是:11
y^z 的结果是:31
---------------------
a 左移2位的结果是:44
y 右移3位的结果是:2
继续阅读 »
数学运算符

数学运算,结果为一个数值。

+ 加法: 1 + 2
- 减法: 4 - 3.4
* 乘法: 7 * 1.5
/ 除法: 3.5 / 7
% 取余: 7 % 2
++ 自增: 3++
-- 自减: 3--


 
关系运算符
关系运算符,结果为一个布尔值

> 大于: a > 4.2
>= 大于等于: 3.4 >= b
< 小于: 1.5 < 9
<= 小于等于: 6 <= 1
== 等于: 2 == 2
!= 不等于: 2 != 2
&& 与 :true && false
|| 或 :(3 > 1) || (2 == 1)
! 非: !true
 


 
位运算符
位运算符对整数的二进制形式逐位进行逻辑运算,得到一个整数。

& 与: 1 & 4
| 或: 2 | 5
^ 异或: 2 ^ 3
~ 非: ~5
<< 左移: 5 << 3
>> 右移: 6 >> 1


 
条件运算符
Java中有一个条件运算符(三目运算符):
    condition ? x1 : x2
condition为一个boolean值。根据condition,取x1或x2的值。
 
关于运算符的一个综合举例:

public class Demo {
public static void main(String[] args){
int a=10;
int b=10;
int x=10;
int y=21;
int z=10;
System.out.println("后自加 a=" + (a++));
System.out.println("a的值 a=" + a);
System.out.println("前自加 b=" + (++b));
System.out.println("---------------------");
System.out.println("说 x>y,对吗?" + (x>y));
System.out.println("认为 x>y 并且 x<y,对吗?" + ( (x>y) && (x<y) ));
System.out.println("认为 x>=y 或者 x==y,对吗?" + ( (x>=y) || (x==y) ));
System.out.println("认为 x<y 或者 x=z,对吗?" + ( (x<y) || (x==z) ));
System.out.println("---------------------");
System.out.println("a&x 的结果是:" + (a&x));
System.out.println("a|x 的结果是:" + (a|x));
System.out.println("y^z 的结果是:" + (y^z));
System.out.println("---------------------");
System.out.println("a 左移2位的结果是:" + (a<<2));
System.out.println("y 右移3位的结果是:" + (y>>3));
}
}


运行结果:
后自加 a=10
a的值 a=11
前自加 b=11
---------------------
说 x>y,对吗?false
认为 x>y 并且 x<y,对吗?false
认为 x>=y 或者 x==y,对吗?false
认为 x<y 或者 x=z,对吗?true
---------------------
a&x 的结果是:10
a|x 的结果是:11
y^z 的结果是:31
---------------------
a 左移2位的结果是:44
y 右移3位的结果是:2
收起阅读 »

【i码邦】java基础教程分享-09-数据类型转换

数据类型的转换,分为自动转换和强制转换。自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制。
 
自动数据类型转换
自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
    低--------------------------------------------->高
    byte,short,char-> int -> long -> float -> double

运算中,不同类型的数据先转化为同一类型,然后进行运算,转换规则如下:

2017060601.png

 
强制数据类型转换
 
强制转换的格式是在需要转型的数据前加上“( )”,然后在括号内加入需要转化的数据类型。有的数据经过转型运算后,精度会丢失,而有的会更加精确,下面的例子可以说明这个问题。
 


public class Demo {
   public static void main(String[] args){
   int x;
   double y;
   x = (int)34.56 + (int)11.2; // 丢失精度
   y = (double)x + (double)10 + 1; // 提高精度
   System.out.println("x=" + x);
   System.out.println("y=" + y);
   }
}


运行结果:
x=45
y=56.0
 
仔细分析上面程序段:由于在 34.56 前有一个 int 的强制类型转化,所以 34.56 就变成了 34。同样 11.2 就变成了 11 了,所以 x 的结果就是 45。在 x 前有一个 double 类型的强制转换,所以 x 的值变为 45.0,而 10 的前面也被强制成 double 类型,所以也变成 10.0,所以最后 y 的值变为 56。
 
继续阅读 »
数据类型的转换,分为自动转换和强制转换。自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制。
 
自动数据类型转换
自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
    低--------------------------------------------->高
    byte,short,char-> int -> long -> float -> double

运算中,不同类型的数据先转化为同一类型,然后进行运算,转换规则如下:

2017060601.png

 
强制数据类型转换
 
强制转换的格式是在需要转型的数据前加上“( )”,然后在括号内加入需要转化的数据类型。有的数据经过转型运算后,精度会丢失,而有的会更加精确,下面的例子可以说明这个问题。
 


public class Demo {
   public static void main(String[] args){
   int x;
   double y;
   x = (int)34.56 + (int)11.2; // 丢失精度
   y = (double)x + (double)10 + 1; // 提高精度
   System.out.println("x=" + x);
   System.out.println("y=" + y);
   }
}


运行结果:
x=45
y=56.0
 
仔细分析上面程序段:由于在 34.56 前有一个 int 的强制类型转化,所以 34.56 就变成了 34。同样 11.2 就变成了 11 了,所以 x 的结果就是 45。在 x 前有一个 double 类型的强制转换,所以 x 的值变为 45.0,而 10 的前面也被强制成 double 类型,所以也变成 10.0,所以最后 y 的值变为 56。
 
收起阅读 »

【i码邦】java基础教程分享-08-数据类型

Java 基本数据类型

变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。

Java 的两大数据类型:
内置数据类型
引用数据类型
 
内置数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

byte:
byte 数据类型是8位、有符号的,以二进制补码表示的整数;
最小值是 -128(-2^7);
最大值是 127(2^7-1);
默认值是 0;
byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
例子:byte a = 100,byte b = -50。

short:
short 数据类型是 16 位、有符号的以二进制补码表示的整数
最小值是 -32768(-2^15);
最大值是 32767(2^15 - 1);
Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
默认值是 0;
例子:short s = 1000,short r = -20000。

int:
int 数据类型是32位、有符号的以二进制补码表示的整数;
最小值是 -2,147,483,648(-2^31);
最大值是 2,147,483,647(2^31 - 1);
一般地整型变量默认为 int 类型;
默认值是 0 ;
例子:int a = 100000, int b = -200000。

long:
long 数据类型是 64 位、有符号的以二进制补码表示的整数;
最小值是 -9,223,372,036,854,775,808(-2^63);
最大值是 9,223,372,036,854,775,807(2^63 -1);
这种类型主要使用在需要比较大整数的系统上;
默认值是 0L;
例子: long a = 100000L,Long b = -200000L。
"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。

float:
float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
float 在储存大型浮点数组的时候可节省内存空间;
默认值是 0.0f;
浮点数不能用来表示精确的值,如货币;
例子:float f1 = 234.5f。

double:
double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
浮点数的默认类型为double类型;
double类型同样不能表示精确的值,如货币;
默认值是 0.0d;
例子:double d1 = 123.4。

boolean:
boolean数据类型表示一位的信息;
只有两个取值:true 和 false;
这种类型只作为一种标志来记录 true/false 情况;
默认值是 false;
例子:boolean one = true。

char:
char类型是一个单一的 16 位 Unicode 字符;
最小值是 \u0000(即为0);
最大值是 \uffff(即为65,535);
char 数据类型可以储存任何字符;
例子:char letter = 'A';。
 
引用类型

在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
对象、数组都是引用数据类型。
所有引用类型的默认值都是null。
一个引用变量可以用来引用与任何与之兼容的类型。
例子:Site site = new Site("Runoob")。

Java常量

常量在程序运行时,不会被修改的量。

在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:final double PI = 3.1415927;虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。

字面量可以赋给任何内置类型的变量。例如:byte a = 68; char a = 'A'byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示。

当使用常量的时候,前缀0表示8进制,而前缀0x代表16进制。例如:int decimal = 100; int octal = 0144; int hexa = 0x64;和其他语言一样,Java的字符串常量也是包含在两个引号之间的字符序列。下面是字符串型字面量的例子:"Hello World" "two\nlines" "\"This is in quotes\""字符串常量和字符常量都可以包含任何Unicode字符。例如:char a = '\u0001'; String a = "\u0001";
 
继续阅读 »
Java 基本数据类型

变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。

Java 的两大数据类型:
内置数据类型
引用数据类型
 
内置数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

byte:
byte 数据类型是8位、有符号的,以二进制补码表示的整数;
最小值是 -128(-2^7);
最大值是 127(2^7-1);
默认值是 0;
byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
例子:byte a = 100,byte b = -50。

short:
short 数据类型是 16 位、有符号的以二进制补码表示的整数
最小值是 -32768(-2^15);
最大值是 32767(2^15 - 1);
Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
默认值是 0;
例子:short s = 1000,short r = -20000。

int:
int 数据类型是32位、有符号的以二进制补码表示的整数;
最小值是 -2,147,483,648(-2^31);
最大值是 2,147,483,647(2^31 - 1);
一般地整型变量默认为 int 类型;
默认值是 0 ;
例子:int a = 100000, int b = -200000。

long:
long 数据类型是 64 位、有符号的以二进制补码表示的整数;
最小值是 -9,223,372,036,854,775,808(-2^63);
最大值是 9,223,372,036,854,775,807(2^63 -1);
这种类型主要使用在需要比较大整数的系统上;
默认值是 0L;
例子: long a = 100000L,Long b = -200000L。
"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。

float:
float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
float 在储存大型浮点数组的时候可节省内存空间;
默认值是 0.0f;
浮点数不能用来表示精确的值,如货币;
例子:float f1 = 234.5f。

double:
double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
浮点数的默认类型为double类型;
double类型同样不能表示精确的值,如货币;
默认值是 0.0d;
例子:double d1 = 123.4。

boolean:
boolean数据类型表示一位的信息;
只有两个取值:true 和 false;
这种类型只作为一种标志来记录 true/false 情况;
默认值是 false;
例子:boolean one = true。

char:
char类型是一个单一的 16 位 Unicode 字符;
最小值是 \u0000(即为0);
最大值是 \uffff(即为65,535);
char 数据类型可以储存任何字符;
例子:char letter = 'A';。
 
引用类型

在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
对象、数组都是引用数据类型。
所有引用类型的默认值都是null。
一个引用变量可以用来引用与任何与之兼容的类型。
例子:Site site = new Site("Runoob")。

Java常量

常量在程序运行时,不会被修改的量。

在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:final double PI = 3.1415927;虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。

字面量可以赋给任何内置类型的变量。例如:byte a = 68; char a = 'A'byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示。

当使用常量的时候,前缀0表示8进制,而前缀0x代表16进制。例如:int decimal = 100; int octal = 0144; int hexa = 0x64;和其他语言一样,Java的字符串常量也是包含在两个引号之间的字符序列。下面是字符串型字面量的例子:"Hello World" "two\nlines" "\"This is in quotes\""字符串常量和字符常量都可以包含任何Unicode字符。例如:char a = '\u0001'; String a = "\u0001";
 
收起阅读 »

【i码邦】java基础教程分享-07-import

import
 如果你希望使用Java包中的类,就必须先使用import语句导入。

import语句与C语言中的 #include 有些类似,语法为:
    import package1[.package2…].classname;
package 为包名,classname 为类名。例如:

import java.util.Date; // 导入 java.util 包下的 Date 类
import java.util.Scanner; // 导入 java.util 包下的 Scanner 类
import javax.swing.*; // 导入 javax.swing 包下的所有类,* 表示所有类
 
注意:import 只能导入包所包含的类,而不能导入包。
为方便起见,我们一般不导入单独的类,而是导入包下所有的类,例如 import java.util.*;。
Java 编译器默认为所有的 Java 程序导入了 JDK 的 java.lang 包中所有的类(import java.lang.*;),其中定义了一些常用类,如 System、String、Object、Math 等,因此我们可以直接使用这些类而不必显式导入。但是使用其他类必须先导入。

前面讲到的”Hello World“程序使用了System.out.println(); 语句,System 类位于 java.lang 包,虽然我们没有显式导入这个包中的类,但是Java 编译器默认已经为我们导入了,否则程序会执行失败。
 
Java类的搜索路径
 
Java程序运行时要导入相应的类,也就是加载 .class 文件的过程。

假设有如下的 import 语句:import p1.Test;该语句表明要导入 p1 包中的 Test 类。

安装JDK时,我们已经设置了环境变量 CLASSPATH 来指明类库的路径,它的值为 .;%JAVA_HOME%\lib,而 JAVA_HOME 又为 D:\Program Files\jdk1.7.0_71,所以 CLASSPATH 等价于 .;D:\Program Files\jdk1.7.0_71\lib。

Java 运行环境将依次到下面的路径寻找并载入字节码文件 Test.class:

p1\Test.class("."表示当前路径)
D:\Program Files\jdk1.7.0_71\lib\p1\Test.class


如果在第一个路径下找到了所需的类文件,则停止搜索,否则继续搜索后面的路径,如果在所有的路径下都未能找到所需的类文件,则编译或运行出错。

你可以在CLASSPATH变量中增加搜索路径,例如 .;%JAVA_HOME%\lib;C:\javalib,那么你就可以将类文件放在 C:\javalib 目录下,Java运行环境一样会找到。
 
继续阅读 »
import
 如果你希望使用Java包中的类,就必须先使用import语句导入。

import语句与C语言中的 #include 有些类似,语法为:
    import package1[.package2…].classname;
package 为包名,classname 为类名。例如:

import java.util.Date; // 导入 java.util 包下的 Date 类
import java.util.Scanner; // 导入 java.util 包下的 Scanner 类
import javax.swing.*; // 导入 javax.swing 包下的所有类,* 表示所有类
 
注意:import 只能导入包所包含的类,而不能导入包。
为方便起见,我们一般不导入单独的类,而是导入包下所有的类,例如 import java.util.*;。
Java 编译器默认为所有的 Java 程序导入了 JDK 的 java.lang 包中所有的类(import java.lang.*;),其中定义了一些常用类,如 System、String、Object、Math 等,因此我们可以直接使用这些类而不必显式导入。但是使用其他类必须先导入。

前面讲到的”Hello World“程序使用了System.out.println(); 语句,System 类位于 java.lang 包,虽然我们没有显式导入这个包中的类,但是Java 编译器默认已经为我们导入了,否则程序会执行失败。
 
Java类的搜索路径
 
Java程序运行时要导入相应的类,也就是加载 .class 文件的过程。

假设有如下的 import 语句:import p1.Test;该语句表明要导入 p1 包中的 Test 类。

安装JDK时,我们已经设置了环境变量 CLASSPATH 来指明类库的路径,它的值为 .;%JAVA_HOME%\lib,而 JAVA_HOME 又为 D:\Program Files\jdk1.7.0_71,所以 CLASSPATH 等价于 .;D:\Program Files\jdk1.7.0_71\lib。

Java 运行环境将依次到下面的路径寻找并载入字节码文件 Test.class:

p1\Test.class("."表示当前路径)
D:\Program Files\jdk1.7.0_71\lib\p1\Test.class


如果在第一个路径下找到了所需的类文件,则停止搜索,否则继续搜索后面的路径,如果在所有的路径下都未能找到所需的类文件,则编译或运行出错。

你可以在CLASSPATH变量中增加搜索路径,例如 .;%JAVA_HOME%\lib;C:\javalib,那么你就可以将类文件放在 C:\javalib 目录下,Java运行环境一样会找到。
 
收起阅读 »

【i码邦】java基础教程分享-07-类库

Java 官方为开发者提供了很多功能强大的类,这些类被分别放在各个包中,随JDK一起发布,称为Java类库或Java API。API(Application Programming Interface, 应用程序编程接口)是一个通用概念。
 
也就是说,Java类库中,为我们实现了很多常用的功能和方法,我们可以直接使用,不用自己再去重新编写代码去实现,这就大大节省了我们编码的工作量。

例如我编写了一个类,可以获取计算机的各种硬件信息,它很强大很稳定,如果你的项目也需要这样一个功能,那么你就无需再自己编写代码,将我的类拿来直接用就可以。但是,我的类代码很复杂,让你读完这些代码不太现实,而且我也不希望你看到我的代码(你也没必要也不希望读懂这些晦涩的代码),我要保护我的版权,怎么办呢?

我可以先将我的类编译,并附带一个文档,告诉你我的类怎么使用,有哪些方法和属性,你只需要按照文档的说明来调用就完全没问题,既节省了你阅读代码的时间,也保护了我的版权。例如,获取CPU信息的方法:
    getCpuInfo(int cpuType);
这就是一个API。也就是说,该文档中描述的类的使用方法,就叫做API。

我也可以开发一个软件,用来清理计算机中的垃圾文件,我比较有公益心,希望让更多的开发人员使用我的软件,我就会在发布软件的同时附带一个说明文档,告诉你怎样在自己的程序中调用,这也叫做API。

Java API也有一个说明文档,入口地址:http://www.oracle.com/technetwork/java/api

选择对应版本的Java,点击链接进入即可。J2SE 1.7 的API地址为:http://docs.oracle.com/javase/7/docs/api/

这个文档是在线的,官方会随时更新。当然你也可以下载到本地,请大家自己百度怎么下载。
 
打开J2SE 1.7 的API文档,如下图所示:
1.png

 
Java类库中有很多包:
  • 以 java.* 开头的是Java的核心包,所有程序都会使用这些包中的类;
  • 以 javax.* 开头的是扩展包,x 是 extension 的意思,也就是扩展。虽然 javax.* 是对 java.* 的优化和扩展,但是由于 javax.* 使用的越来越多,很多程序都依赖于 javax.*,所以 javax.* 也是核心的一部分了,也随JDK一起发布。
  • 以 org.* 开头的是各个机构或组织发布的包,因为这些组织很有影响力,它们的代码质量很高,所以也将它们开发的部分常用的类随JDK一起发布。

在包的命名方面,为了防止重名,有一个惯例:大家都以自己域名的倒写形式作为开头来为自己开发的包命名,例如百度发布的包会以 com.baidu.* 开头,w3c组织发布的包会以 org.w3c.* 开头,【i码邦】发布的包会以 cn.idehub.* 开头……

组织机构的域名后缀一般为 org,公司的域名后缀一般为 com、net、cn(中国本土企业网站,面向国内用户),可以认为 org.* 开头的包为非盈利组织机构发布的包,它们一般是开源的,可以免费使用在自己的产品中,不用考虑侵权问题,而以 com.* 开头的包往往由盈利性的公司发布,可能会有版权问题,使用时要注意。

java中常用的几个包介绍:
  • java.lang 该包提供了Java编程的基础类,例如 Object、Math、String、StringBuffer、System、Thread等,不使用该包就很难编写Java代码了。
  • java.util 该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。
  • java.io 该包通过文件系统、数据流和序列化提供系统的输入与输出。
  • java.net 该包提供实现网络应用与开发的类。
  • java.sql 该包提供了使用Java语言访问并处理存储在数据源(通常是一个关系型数据库)中的数据API。
  • java.awt/javax.swing 这两个包提供了GUI设计与开发的类。java.awt包提供了创建界面和绘制图形图像的所有类,而javax.swing包提供了一组“轻量级”的组件,尽量让这些组件在所有平台上的工作方式相同。(前几年桌面产品多用这两个进行开发,现在基本上很少用,了解即可)
  • java.text 提供了与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。

 
更多的包和说明请参考API文档。
继续阅读 »
Java 官方为开发者提供了很多功能强大的类,这些类被分别放在各个包中,随JDK一起发布,称为Java类库或Java API。API(Application Programming Interface, 应用程序编程接口)是一个通用概念。
 
也就是说,Java类库中,为我们实现了很多常用的功能和方法,我们可以直接使用,不用自己再去重新编写代码去实现,这就大大节省了我们编码的工作量。

例如我编写了一个类,可以获取计算机的各种硬件信息,它很强大很稳定,如果你的项目也需要这样一个功能,那么你就无需再自己编写代码,将我的类拿来直接用就可以。但是,我的类代码很复杂,让你读完这些代码不太现实,而且我也不希望你看到我的代码(你也没必要也不希望读懂这些晦涩的代码),我要保护我的版权,怎么办呢?

我可以先将我的类编译,并附带一个文档,告诉你我的类怎么使用,有哪些方法和属性,你只需要按照文档的说明来调用就完全没问题,既节省了你阅读代码的时间,也保护了我的版权。例如,获取CPU信息的方法:
    getCpuInfo(int cpuType);
这就是一个API。也就是说,该文档中描述的类的使用方法,就叫做API。

我也可以开发一个软件,用来清理计算机中的垃圾文件,我比较有公益心,希望让更多的开发人员使用我的软件,我就会在发布软件的同时附带一个说明文档,告诉你怎样在自己的程序中调用,这也叫做API。

Java API也有一个说明文档,入口地址:http://www.oracle.com/technetwork/java/api

选择对应版本的Java,点击链接进入即可。J2SE 1.7 的API地址为:http://docs.oracle.com/javase/7/docs/api/

这个文档是在线的,官方会随时更新。当然你也可以下载到本地,请大家自己百度怎么下载。
 
打开J2SE 1.7 的API文档,如下图所示:
1.png

 
Java类库中有很多包:
  • 以 java.* 开头的是Java的核心包,所有程序都会使用这些包中的类;
  • 以 javax.* 开头的是扩展包,x 是 extension 的意思,也就是扩展。虽然 javax.* 是对 java.* 的优化和扩展,但是由于 javax.* 使用的越来越多,很多程序都依赖于 javax.*,所以 javax.* 也是核心的一部分了,也随JDK一起发布。
  • 以 org.* 开头的是各个机构或组织发布的包,因为这些组织很有影响力,它们的代码质量很高,所以也将它们开发的部分常用的类随JDK一起发布。

在包的命名方面,为了防止重名,有一个惯例:大家都以自己域名的倒写形式作为开头来为自己开发的包命名,例如百度发布的包会以 com.baidu.* 开头,w3c组织发布的包会以 org.w3c.* 开头,【i码邦】发布的包会以 cn.idehub.* 开头……

组织机构的域名后缀一般为 org,公司的域名后缀一般为 com、net、cn(中国本土企业网站,面向国内用户),可以认为 org.* 开头的包为非盈利组织机构发布的包,它们一般是开源的,可以免费使用在自己的产品中,不用考虑侵权问题,而以 com.* 开头的包往往由盈利性的公司发布,可能会有版权问题,使用时要注意。

java中常用的几个包介绍:
  • java.lang 该包提供了Java编程的基础类,例如 Object、Math、String、StringBuffer、System、Thread等,不使用该包就很难编写Java代码了。
  • java.util 该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。
  • java.io 该包通过文件系统、数据流和序列化提供系统的输入与输出。
  • java.net 该包提供实现网络应用与开发的类。
  • java.sql 该包提供了使用Java语言访问并处理存储在数据源(通常是一个关系型数据库)中的数据API。
  • java.awt/javax.swing 这两个包提供了GUI设计与开发的类。java.awt包提供了创建界面和绘制图形图像的所有类,而javax.swing包提供了一组“轻量级”的组件,尽量让这些组件在所有平台上的工作方式相同。(前几年桌面产品多用这两个进行开发,现在基本上很少用,了解即可)
  • java.text 提供了与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。

 
更多的包和说明请参考API文档。
收起阅读 »

【i码邦】java基础教程分享-06-对象

对象是类的一个实例,有状态和行为,是类的具体实现。
 
比如女人是一个类,而彭麻麻就是具体的对象。
 
类和对象是面向对象编程中最基本、也是最重要的特征之一,它们整个面向对象中最基础的组成单元。搞清楚了对象和类,学习java就不再是难事了。
 
从类和对象以后的学习内容,将介绍如何进行面向对象的程序开发,以及程序开发的过程中,所需要具备的重要思想是什么?编程思想是很多学习编程的人,学习时间长却学不好的一个主要原因。
 
Java中的对象

现在让我们深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。
所有这些对象都有自己的状态和行为。

可以一句话来总结出类和对象的区别:类是对象的模板,对象是类的实例。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。类不能直接使用,对象是可以直接使用的

对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象

对比现实对象和软件对象,它们之间十分相似。
软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。
在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
 
类与对象的定义和使用
在Java中定义类,使用关键字class完成。语法如下:
class 类名称 {
  属性 (变量) ;
  行为 (方法) ;
}

类定义完成之后,肯定无法直接使用。如果要使用,必须依靠对象,那么由于类属于引用数据类型,所以对象的产生格式(两种格式)如下:

(1)格式一:声明并实例化对象类名称
    对象名称 = new 类名称 () ;
(2)格式二:先声明对象,然后实例化对象:
   类名称 对象名称 = null ;
   对象名称 = new 类名称 () ;



引用数据类型与基本数据类型最大的不同在于:引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间。

当一个实例化对象产生之后,可以按照如下的方式进行类的操作: 
对象.属性:表示调用类之中的属性; 
对象.方法():表示调用类之中的方法。

范例:使用对象操作类

package com.wz.classandobj;
 class Person {
   String name ;
   int age ;
   public void get() {
     System.out.println("姓名:" + name + ",年龄:" + age);
 }
}
 
 public class TestDemo {
   public static void main(String args[]) {
     Person per = new Person() ;// 声明并实例化对象
     per.name = "张三" ;//操作属性内容
     per.age = 30 ;//操作属性内容
     per.get() ;//调用类中的get()方法
 }
}


运行结果:姓名:张三,年龄:301

以上完成了一个类和对象的操作关系,下面换另外一个操作来观察一下:

package com.wz.classandobj;
 class Person {
 String name ;
 int age ;
 public void get() {
   System.out.println("姓名:" + name + ",年龄:" + age);
   }
 }
 
 public class TestDemo {
    public static void main(String args[]) {
       Person per = null;//声明对象
       per = new Person() ;//实例化对象
       per.name = "张三" ;//操作属性内容
       per.age = 30 ;//操作属性内容
       per.get() ;//调用类中的get()方法
    }
 }


运行结果:姓名:张三,年龄:301

那么,问题来了,以上两种不同的实例化方式有什么区别呢? 
我们从内存的角度分析。首先,给出两种内存空间的概念: 
(1)堆内存:保存对象的属性内容。堆内存需要用new关键字来分配空间; 
(2)栈内存:保存的是堆内存的地址(在这里为了分析方便,可以简单理解为栈内存保存的是对象的名字)。
 
任何情况下,只要看见关键字new,都表示要分配新的堆内存空间,一旦堆内存空间分配了,里面就会有类中定义的属性,并且属性内容都是其对应数据类型的默认值。
 
如果上面的程序只声明了Person对象(Person per = null;//声明对象),但并没有实例化Person对象(只有了栈内存,并没有对应的堆内存空间),则程序在编译的时候不会出现任何的错误,但是在执行的时候出现了上面的错误信息。这个错误信息表示的是“NullPointerException(空指向异常)”,这种异常只要是应用数据类型都有可能出现。
 
继续阅读 »
对象是类的一个实例,有状态和行为,是类的具体实现。
 
比如女人是一个类,而彭麻麻就是具体的对象。
 
类和对象是面向对象编程中最基本、也是最重要的特征之一,它们整个面向对象中最基础的组成单元。搞清楚了对象和类,学习java就不再是难事了。
 
从类和对象以后的学习内容,将介绍如何进行面向对象的程序开发,以及程序开发的过程中,所需要具备的重要思想是什么?编程思想是很多学习编程的人,学习时间长却学不好的一个主要原因。
 
Java中的对象

现在让我们深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。
所有这些对象都有自己的状态和行为。

可以一句话来总结出类和对象的区别:类是对象的模板,对象是类的实例。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。类不能直接使用,对象是可以直接使用的

对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象

对比现实对象和软件对象,它们之间十分相似。
软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。
在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
 
类与对象的定义和使用
在Java中定义类,使用关键字class完成。语法如下:
class 类名称 {
  属性 (变量) ;
  行为 (方法) ;
}

类定义完成之后,肯定无法直接使用。如果要使用,必须依靠对象,那么由于类属于引用数据类型,所以对象的产生格式(两种格式)如下:

(1)格式一:声明并实例化对象类名称
    对象名称 = new 类名称 () ;
(2)格式二:先声明对象,然后实例化对象:
   类名称 对象名称 = null ;
   对象名称 = new 类名称 () ;



引用数据类型与基本数据类型最大的不同在于:引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间。

当一个实例化对象产生之后,可以按照如下的方式进行类的操作: 
对象.属性:表示调用类之中的属性; 
对象.方法():表示调用类之中的方法。

范例:使用对象操作类

package com.wz.classandobj;
 class Person {
   String name ;
   int age ;
   public void get() {
     System.out.println("姓名:" + name + ",年龄:" + age);
 }
}
 
 public class TestDemo {
   public static void main(String args[]) {
     Person per = new Person() ;// 声明并实例化对象
     per.name = "张三" ;//操作属性内容
     per.age = 30 ;//操作属性内容
     per.get() ;//调用类中的get()方法
 }
}


运行结果:姓名:张三,年龄:301

以上完成了一个类和对象的操作关系,下面换另外一个操作来观察一下:

package com.wz.classandobj;
 class Person {
 String name ;
 int age ;
 public void get() {
   System.out.println("姓名:" + name + ",年龄:" + age);
   }
 }
 
 public class TestDemo {
    public static void main(String args[]) {
       Person per = null;//声明对象
       per = new Person() ;//实例化对象
       per.name = "张三" ;//操作属性内容
       per.age = 30 ;//操作属性内容
       per.get() ;//调用类中的get()方法
    }
 }


运行结果:姓名:张三,年龄:301

那么,问题来了,以上两种不同的实例化方式有什么区别呢? 
我们从内存的角度分析。首先,给出两种内存空间的概念: 
(1)堆内存:保存对象的属性内容。堆内存需要用new关键字来分配空间; 
(2)栈内存:保存的是堆内存的地址(在这里为了分析方便,可以简单理解为栈内存保存的是对象的名字)。
 
任何情况下,只要看见关键字new,都表示要分配新的堆内存空间,一旦堆内存空间分配了,里面就会有类中定义的属性,并且属性内容都是其对应数据类型的默认值。
 
如果上面的程序只声明了Person对象(Person per = null;//声明对象),但并没有实例化Person对象(只有了栈内存,并没有对应的堆内存空间),则程序在编译的时候不会出现任何的错误,但是在执行的时候出现了上面的错误信息。这个错误信息表示的是“NullPointerException(空指向异常)”,这种异常只要是应用数据类型都有可能出现。
 
收起阅读 »
Template error, template file not found