Java中为什么老是说重构,重构到底是什么意思?
首先,重构这个概念,不是JAVA所特有的,而是软件工程的一个概念。
主要是指改善现有的程序代码,使其更方便、简单的使用,提高可重用性、可维护性。
在面向对象C++\C#\JAVA等语言中,重构的概念一般是指对类进行重构,一般在现有类的某些功能方法不能满足扩展需要,或者修复BUG时,就需要重构重构是一个可迭代的过程,可以对一个功能重复重构,直到其满足软件的需求、维护和可扩展性重构的方法比较多,一本书也说不完,一些概念性的内容见百科http://baike.baidu.com/view/120901.htm
网络编程方面的,最好是java的
给软件开发初学者在论坛上呆久了,发现很大一部分有关开发的帖子都是有关心怀梦想,立志成为一个软件英雄或者响当当的黑客人物;或者是狂热的游戏玩家,突然想迈入游戏开发的殿堂,自己打造一个完美的游戏;或者被以前IT行业的“钱”途无量所吸引,为了经济因素希望成为一个程序员的,而寻求进入软件开发领域之门的求助帖子。
这些诸如“你好,我想做程序员,应该怎么做?”,“初学C++,请问看什么书好”,“请高手帮我看看这个程序”,“我想转行,请高手指点”……的帖子占了各大软件开发论坛帖子总量的很大一部分,而且内容是长年不变,重复来重复去 :P自从做了epubcn的C++板块的版主,经常收到不相识网友的消息或Email,基本上还是问这些问题。
看到这些帖子和Email,不禁想起自己刚刚迈入软件开发的领域,茫茫然不知何去何从,兴奋而又彷徨不安的过去,这样的经历一次又一次,在不同的地点、不同的时间仍然在不断的重复。
今天终于坐下来,写下一点文字,希望能够对彷徨的朋友们有点帮助。
确认你真的要迈入软件开发领域软件开发是一项纯智力活动(现在人们都意识到长时间超负荷的连续写程序并不会提高软件生产率,反而会对软件品质造成很大负面影响,所以尽管很多程序员仍然长时间加班,但这种现象正在逐步减少并最终会消失,所以体力要求并不会比其他行业高),如果你不是一个智力高于平均水平的人,说实话,软件开发并不适合你,你基本不可能在软件开发领域取得很高的成就和地位,而且不久就会因为年龄的增长而被淘汰。
如果你以那些开发出共享软件的软件英雄和著名黑客为榜样,立志也要成为他们的一员,像武侠小说中的大侠一样仗剑江湖。
我要先给你泼上大大一盆冷水,把你从幻想拉到现实中来。
首先,现在的软件其复杂度和规模都远远超过以前,想一个人独力完成一个规模稍大的软件,基本没有可能(虽然还是有些特例, but trust me,那些仅仅是特例,请不要把自己想像成独一无二的超人、幸运儿);其次,无论是软件英雄还是仗剑江湖的顶尖黑客,他们的软件开发功底和智力都远远超过软件行业从业者的平均水平,没有多年的积累和坚韧超常人的毅力,是不可能,换句话说,想成为他们的一员,可以,但请首先成为一个合格的软件开发人员。
如果你是因为传说中程序员的所谓“高薪”,对自己现在从事的工作不满意,而萌生转行的念头,我劝你还是再慎重考虑一下。
程序员的待遇一般来说,是要比平均水平高一些,但远远谈不上高薪,而且以现在程序员的工作量来算,其实同样的付出,程序员所得到的能和平均水平看齐就不错了,程序员的竞争和淘汰也是异常残酷的。
技术的更新速度更是其他行业所罕见,每个程序员都要不停的跑步跟上,不使自己落伍,所以在这个层面上来说,没有谁可以停下来休息,唯一能够积累下来的就是你的经验,但经验中能够为你的竞争力增添筹码的并不多。
说了这么多,并不是我故意贬低,而是希望告诉你我所知道的软件开发行业的真实情况,基于此请再慎重考虑你是不是真的要迈入软件开发领域。
检验一下你是否适合当个程序员在我看来,要做一个合格的程序员,你需要具备下面几个条件:1. 强烈的好奇心和求知欲2. 追求完美的精神3. 良好的逻辑分析能力其他方面的条件几乎所有类似的帖子都有提及:如果你不是准备单打独斗,那么团队合作能力必不可少;英语我就懒得说了,没有基本的阅读英文资料的能力,我劝你还是打消做个程序员的想法,没有为什么;数学能力也是必不可少的,如果不是做算法,高中水平的数学能力就足够了,但一定要成绩很好才行。
那么为什么我要强调上面列的三点呢?具有强烈的好奇心和求知欲,能够让你跟上技术发展的步伐,仅仅靠危机感和责任感,你对技术的学习会有很强的功利性质,导致你的技术体系不能构成一个完整自包容的整体,而且很难对技术有高层次的认识和掌握。
我认识的一个资深系统设计师跟我说过:做软件,“做出来”和“做的好”完全是两个概念,所要求的投入和技术水平是天壤之别。
现在国内很多程序员仅仅把软件开发当作养家糊口的谋生手段,国内计划经济时代凑合、马马虎虎干活的思想也渗透到了软件业,很多程序员仅仅是把功能做出来,根本不会去考虑提高重用性、可维护性,也不会去考虑提高稳定性、运行速度,甚至连代码也是乱七八糟,基本的编码规范都不遵守(在我看来,这样的人不配“程序员”这个称号),在我们大声谴责国内软件业环境不好,拉项目靠关系,没有质量保证体系,老板不重视程序员,疯狂剥削程序员的时候,我们是不是该问问自己,你是不是只把眼睛盯着别人?现在各种软件开发包应有尽有,包罗万象,编程工具也异常强大方便,对于国内占主流的MIS系统来说,要完成一个功能实在不是很难的事情,但是如果把系统做为一个整体,则大多数都是运行缓慢、占用资源过大、兼容性差、可维护性差、不稳定的系统,你可曾尝试过开发一个优秀的系统,如果有,你就会发现开发优秀软件是多么困难,对技术的要求是多么高,而你在努力做到完美的过程中水平的提升是多么快...
关于core java
是同一部书的两个版本,第八版更新,讲的是jdk6,第七版讲的是jdk1.5,仍然属于java2的范畴,所以叫《Java2核心技术》,而第八版去掉了2。
建议购买第八版,因为java的jdk是在不断的更新的,虽然现在立刻不能让企业、公司里的jdk全部换代,但是这是必然趋势,迟早也需要买jdk6的书,jdk6的书里也会讲和jdk1.5的区别。
《java核心技术》这套书非常好,是公认极好的java入门书籍。
不过很厚,可能不太容易让人有兴趣一下读完。
另外一本公认很好的java入门书叫做《Head First java》,是融入大量图片的书,比较有趣,你可以上网搜搜,按喜欢购买。
不过,目前后者只出到jdk1.5的版本。
java入门以后,熟练以后想要成为高手还有必备的一部经典书,《Thinking in java》,能给开发人员很大的提高。
ps:呵呵,这是上面一个问题的答案,我全复制过来了另外再给你推荐几本不错的书Thinking Java , Weblogic6.0 Bible , O 'Reilly EJB希望这些对你有帮助
学java看什么书
java基础。
2.html/css/js ,servlet/jsp(j2ee) 以及mysql数据库应用。
3.学习框架,一般ssm(spring + springmvc+mybatis) 。
4.了解maven工程。
5.看完《java编程思想》。
6.《动力节点java301基础大全教程》7.代码编写优化《重构改善既有代码的设计》,《effective java》。
8.2-3年《深入理解java虚拟机》。
9.《java并发编程实战》.10.查看java类库,jdk源码。
11.其他技术,比如大数据,分布式缓存,分布式消息服务,分布式计算,软负载均衡等,深入了解其中一项再考虑其他。
12.《深入理解计算机系统》(比较适合java Web开发和APP后端开发),《tcp/ip详解 卷一,二,三》(适合网络编程),《数据结构与算法》(适合计算机研究工作,如分布式计算)。
13.这个时候可以去Github创建一个属于自己的开源项目,打造自己的产品。
从入门开始,如何系统、全面而深入地学习Java?
问得好,1 基础扎实,很有帮助。
2 要学到精通。
要花很长一段时间投入的。
大概写一下个人的感觉吧,这样的问题,网上的答案很多的,1 初学的话,从java的本身语法开始。
很多人觉得这些东西很简单,可能一天或者一个上午就完事了。
但是,所有的东西,最关键的细节,god in details.你看完以后,去做一下scjp的试题目,看看自己的水平,深深反省一下。
不是需要去考这个认证,是让你真正意识到自己对于java的认识。
这个阶段可以看一些java培训教程,好像有一个叫张孝详的,比较适合没有其他语言基础的人,如果有基础的,可以看看thinking in java2 然后一些提高阶段,对于java的语法熟悉以后,就是熟悉java语言,对语言最好的熟悉方法是熟悉他的类库,这个部分,个人推荐最好的书是core java,现在到7还是8版了,我看是的时候是6版本。
这本书是我所知道认可程序最高的一本java书了。
3 在对语法和语言都有一定程度的熟悉以后,就要知其然后知其所以然(前提是你想真正精通这个语言,不然这个时个就可以去搞jsp了),这个时候站的角度要高一些,先看看jvm,现在国内这个方法据我看的,没有什么特别好的书,因为也没有几本,了解了整个java是如何运行的以后。
想像一下,如果自己需要实现一个java的话,如何做,带着这个问题去jdk的源代码,你会收获很大的。
有一本书,叫effect java,本来应该是关于最基础的东西,但是很难的,在这个阶段看的话,收获会很不一样的。
4 在真正花时间在前三个阶段以后,打一个真正扎实的java基础以后,就可以开始真正面java最流行的领域了,从servlet,jsp开始,然后是J2EE那些东西。
那些东西在本质上考虑的更多的设计理念和设计模式的东西了。
有一个叫java与模式的书,好像叫阎什么写的,是设计模式很不错的一本入门的书。
在看书的时候,想法要开阔一些,不妨想一下,如果我自己要实现个tomcat,应该从哪里开始,如果有这样的想法,对于tomcat这些东西的理解,肯定要比大多数的人深刻一些。
5 在以上的东西都学到一定程度以后,那个时间就更应该关注的是方法论的东西了。
包括软件开发模式,程序设计的方法学,这个阶段比较高了,我本人研究不深入,不能提供过多的东西,只能提供一些名词,例如重构,敏捷开发等等。
国外好像一个martin, Robert等什么的在这方面比较有研究。
以上所有的过程就需要很多的动手实践,没有实践,所有的编程语言的学习都只是水中花,镜中月,练拳还要练功。
如果你有良好的心态(这个最重要了),不要在别人开始学习J2ee等东西的时候,受不住诱惑,偏离了这个方向,要知道,玄门的功夫都是开始入门极难,然后越来越快的,九阴白骨爪之类的就刚好相反了。
学习的过程,别的什么都不重要,最重要的一点,是勤奋, 天道酬勤。
Java的优势有哪些?
Java最大的优势在于其庞大而完善的生态系统。
一门编程语言是否能流行,主要是由其生态系统决定的。
Java生态系统的完善性主要体现在以下几个方面:Java拥有世界上数量最多的程序员。
你说他们是农民也好,但数量放在那里,最明显的效果就是公司招人的时候会比较容易地招到Java程序员。
试想如果你想要做一套软件,你有一个很棒的技术方案需要用C++,Scala或Ruby等语言实现,但招不到足够的人手,那么计划多半泡汤。
这时候你的应用Java也能做到,并且很轻松就能招到足够的人,那么你选择Java的可能性就要大一些。
Java拥有大量的第三方类库。
假如你想解析HTML,用C/C++这类语言恐怕多半只能自己编写解析算法库了,而如果是Java,你可以非常轻松地在Github上找到JSoup,使用Maven导入依赖后分分钟就搞定HTML。
为此还有一句讽刺Java的话是:“我们不生产代码,我们只是Github的搬运工。
”这句话从字面上看是很有道理的,但却忽略了对软件生产效率的提升所带来的巨大价值。
对于软件的开发,公司的唯一成本其实就是“人头费”,每减少一个月开发时间,就能帮助公司节省几十万几千万的研发成本。
Java拥有功能强大的IDE。
Eclipse,通过插件几乎可以满足你开发的任何需求。
它虽然有些慢,但你可以通过JVM调优来提高程序的流畅度,千万不要使用默认的JVM参数。
不过,IntelliJ Idea已经完全超越Eclipse了,Idea的智能程度几乎可以媲美Win平台下的VS。
我是那类离了Vim就活不下去的人,在这两款IDE中都有Vim插件从而让我愉快地存活下去。
Java拥有很多杀手级应用。
不必多说,Spring, Struts, Hibernate, Hadoop, Tomcat, JBoss等等。
Java的语法特性很少。
对,这也是一项优点。
C++相比C添加了大量特性,学起来费事不说,用起来还会降低代码可读性,其实是费了工夫不讨好。
当今世界对编程语言的要求是语法简单,代码可读,对性能已经是退而求其次了,因此才诞生了Python, Ruby这样的编程语言。
有很多人批评Java语法写起来很臃肿,我承认这一点,但事实是,编程语言从来都不是因为语法臃肿而被淘汰的,决定其生死的是生态系统。
对于批评者,引用知乎的一句话:“动态类型一时爽,代码重构火葬场”Java的性能已经足够高了。
Sun/Oracle的HotSpot JVM内置的JIT编译器在运行时对字节码已经做出了非常大的优化努力,服务端应用启动后对JVM进行足够的“预热”,并给出合理的启动参数即可。
如果不是对性能十分敏感的系统类应用,Java已经足够快了。
有一种简单可行的方法可以形象地看出这点,在JVM启动参数中添加+XX:PrintCompilation可以看到JIT编译器的忙碌。
当今世界对软件的需求量越来越大,在性能可接受的情况下,开发效率才是第一位的,这也是Python这类动态脚本语言流行的主要原因。
我为什么选择成为Java程序员,学完之后能做什么
学习Java的原因:1、简单易学:Java是一个面向对象的编程语言,容易理解。
而且略去了多重加载、指针等难以理解的概念。
并且实现了自动垃圾回收,大大简化了程序设计。
且学习资料较多,从CSDN学院或其他在线学院中就可以找到很多Java的学习视频,另外也有一些培训机构提供的有免费的Java视频课程。
有这些学习资料,入门足矣。
2、跨平台:Java运行在JVM(Java虚拟机)上,在任何平台只要安装了JVM。
Java就可以运行。
它架构在操作系统之上,屏蔽了底层的差异。
真正实现了“Write once,run anywhere”。
3、安全:Java中没有指针,这样就没有办法直接访问内存了。
另外Java也不容易出现内存泄露。
4、多线程:Java内置对多线程的支持,可以方便地在程序中实现多线程的功能。
不像其他不支持多线程的语言,需要调用操作系统的多线程功能才能完成多线程的实现。
5、有丰富的类库一名Java程序员可以做:编写工程师、软件设计和开发工程师、Javaweb开发工程师、数据库研发开发工程师、亦可以选择从事自主创业。
java程序员需要学习什么
java 是个大概念 也是一种编程环境 具体分三大体系 j2se j2me j2ee j2se 是java的基础知识 部分C/S构架的软件和可视化开发软件 如大型OA ERP 各种小游戏等都是 j2se 做的.因为JAVA本身是 解释性语言在做这方面的软件上没有优势可言. j2me 是手机类的软件开发,如手机游戏,手机界面等等,此方向不错 在国内也算是个缺口比较大的行业了,随着科技的发展此方向优势会 慢慢显现出来. j2ee 是目前java的最大优势所在,因为java本身开源所以发展日新月异 大型企业级应用,电子商务等等,都是依托J2EE 这个标准设计开发的,同时J2EE 也是一种B/S 开发模式,学这个方向 需要会的内容很多,如j2se javabean ,servlet,ejb 等这些是基础内容 想做J2EE开发 你还要会JSP 流行框架 struts hibernate ibatis spring jsf 等等 很复杂,非朝夕能学会的,需要有毅力或有开发基础者学之.………………………………………………………………………… 看你问的问题,应该是对java很感兴趣,其实你可以自学java。
关于如何学习java,我刚才看到一篇很不错的文章,是一个农民工介绍自己如何自学java,并找到Java的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。
我是一名地地道道的农民工,生活在经济落后的农村,有一个哥哥和一个弟弟,父母都是地道的农民,日出而作,日落而息,我从小到大学习一直很好,从小学到高一都,成绩在全级一直名列前茅,这样我也顺利了考上省的重点高中,然而,每个学期开学是家里最为难的时候,每次交学费都让父母发愁许久,家里为了给我筹钱读书,都借了不少钱,才让我读上高中。
我知道我读到高中家里已经欠了好多债,为了减轻家里的负担,我选择了退学。
2009年我高一退学,为了给家里还债,干过建筑工地的小工,搞过塑料制品加工,送水工等等。
很工资都很低,一个月也就1000多,加上加班费一个月能拿2000多一点,我每个月都向家里寄回800-1000元,到了2011年末,一次偶然的机会我接触了Java,听说Java的前景挺不错,工资相对于我一个农民工来说简直是天文数字,于是我在新华书店买了几本Java的书,尽管白天辛苦工作,晚上回来还是坚持看书,但有于基础太差很多都很不明白,但还是坚持看,一有看1-2个小时Java的书,看着看着许多基础都慢慢的学会了,但那些比较难的还是看不懂,后来还买了有些关于框架的书,还是看不懂,这样断断续续的持续了半年多,觉得自己Java的基础都差不多懂了,但框架还是看不懂,还有最缺的项目经验,看了很多招聘Java程序员的简介都要项目经验,相对我一个农民工来连框架都弄不明白,想找一份Java工作对我来说简直是奢侈。
我只想学Java,并不敢想以后能从事Java的工作。
一次,在百度上看到一篇让我很鼓舞的文章,是一个Java高手介绍在没有基础的朋友怎么自学入门Java,文章写的很好,包含了如何学习,该怎么学习,他提到一个方法就是看视频,因为看书实在太枯燥和费解的,不少是我们也看不懂,这点我真的很认同,我自己看书都看了很久才学会基础。
曾经有想过参加培训,但是上万元的培训费让我望而却步,我工资这么低,每个月还有向家里汇钱,加上城市消费比较高,虽然每个月只有几百剩下,但是相对于上万万学费和四个月的吃住费用逼我连想不敢想。
于是我决定看视频,我就去搜索Java的视频,虽然我零星的找到一些Java的视频,但是都不系统。
最重要连项目都没有。
后来我找到一份很好的视频,是IT学习联盟这个网站一套视频叫>(喜欢《零基础Java就业班》的可以复制 t.cn/8sx5z6L 粘贴浏览器地址栏按回车键即打开)的教程还不错,很完整。
还赠送11个顶级企业项目。
价格很合理,于是我买下来。
于是开始了我的自学Java的路,收到光盘后,我就开始学习,刚开始学习还不错,是从零基础教起,老师幽默风趣而又轻松的课堂教课,使我发现原来学习JAVA并不是一件很难的事情。
因为我本来基础还不错,前面的基础看一篇我就过去了,到了框架,我觉不又不是很难,可能老师太牛了,他能把复杂的问题讲的比较通俗易懂,有些难点的地方我还是连续看了五六次,把他弄懂。
每天下午6点下班后,吃了饭,马上跑回家。
看视频,买了几本笔记本。
当时,为了编程还花几百元了台二手的台式电脑,配置一般,但编程是足够的。
一边看视频,一边记笔记,把重点都记下来,还一边跟着老师敲代码,为了能尽早学会Java。
每天都坚持学5-6个小时。
经常学到晚上一点多才睡觉。
星期六,日不用上班,每天7点多起床,学到晚上11,12点。
那段时间特别辛苦,特别累。
在学习Java的三个多月里,除了吃饭睡觉工作,剩余的时间都在学习,因为我知道自己的计算机基础不是很好,也没有学过什么计算机,只是学了些Java基础,相对于那些科班的人来说我要比他们付出更多的努力。
我只能咬紧牙关,坚持下去,我不能放弃,我要完成我的梦想,我要让我的家人过上好日子。
终于三个多月后我把Java教程里的内容和项目都学完了,在学项目的过程中我发现项目特别重要,他能把你学过的知识全部联系起来,能更好的理解你所学的知识。
还有学习过程中,...
覆盖(重写),重构,重载的区别和这到底是否重载
首先这三个概念描述得范围是不同的:1.重构, 是对软计设计方法的描述, 这个层面是架构和设计方法,你今天写了一个应用, 读txt文档并显示, 几天后,用户的新需求来了, 告诉你, 我要读一个XML文本并显示, 这个时候, 你从前的代码需要做变更, 这个变更的动作, 就叫做重构;更小一点的例子,你维护的模块有个类叫做Class_B, 别人不爽, 觉得名字不好理解, 要你更改成TXTReader, 并附上注释,也叫做重构.重构是一个软件维护的通用技巧, 重构的具体做法, 可以通过重写或者重载等, 但不限于此, 更改注释, 更改函数名类名等,都可以称之为重构,重构的目的是为了让软件容易维护, 修改其Bug等.2.覆盖(重写), 即override(Overwrite), 表达的都是一个含义,《Thinking in java》中用的是Override, 翻译为覆盖, (跟他们相区别的概念为OverLoad[重载])override(Overwrite)是子类覆盖基类的方法.父类的protect或者public方法无条件的成为子类的方法,但子类不爽, 想要将继承过来的方法改造一下。
这就是override, 方法名,参数值,都是一模一样的。
但内容体(方法中的代码)已经不同了。
3.重载(Overload)就是通过方法的参数识别不同的函数比如你有一个AMethod()不带参数, 然后你用了一个另外相同名称的方法,带一个参数AMethod(String para),这个过程就叫做重载.