首页 / JAVA / Java语言十五讲(总结)
Java语言十五讲(总结)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java语言十五讲(总结),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含15046字,纯文字阅读大概需要22分钟。
内容图文
讲完了。你们或许会问,难道这十几讲就涵盖了Java的主要方面了吗?当然不是,有些很重要的内容我都没有提及,比如网络编程。我们的讲座不是编写教材,并不全面,主要是通过一些主题让大家对Java有一个进阶的理解。一开头我就说了,听众是相关专业毕业并有一年左右的Java编程基础的人。要看入门教科书和语言参考书,有很多选择,我决心不再走人的老路,我想结合自己的经历,为大家展示一位自认为Java布道者的理解。我的一系列讲座,从Java语言,到Web框架探索,到设计模式和算法,再到文本分析和自然语言理解,都是按照这个思路发展出来的。我不确定这种带有个人化的技术写作最后的命运是什么,但是这就是我的选择。
Java只是又一门语言吗?很多人刚接触的时候都会这么想,语言太多了。历史上大部分语言只是计算机的指令集,并不具有一门“语言”方面的系统性。随着问题变得愈大和愈复杂,不同表达方式的方便灵活以及局限会显露无遗。但是Java不同,不可将 Java 简单想象成一系列功能特性的集合,当在考虑“设计”、而非考虑简单的编码时,才可真正体会到Java 的强大。我认为Java能够跻身语言族中的一员,同人类任何语言一样,Java 为我们提供了一种表达思想的方式。
Java显著地减少了程序员开发程序的复杂性。并在长期的发展中,解决了重要的复杂任务,如多线程,网络编程,企业计算框架,最终解决了跨平台编程,动态代码和安全的任务。我们用Java来解决面对的问题时,都能从“举步维艰”到“起立鼓掌”。
Java体系,洋洋大观,自成一体。从最初的设备上的平台系统,不停迭代,参与和领导了互联网大潮、移动计算潮流、大数据浪潮、云计算浪潮。关键在于创始者Gosling他们登高望远,眼界宏大,立志为跨平台系统制定不拔之法则,终成数十年以来的名门正派。应了那句古诗:欲穷千里目,更上一层楼。
几十年以来,Java都一直受人欢迎,总是站立潮头。我想主要有几点,一,Java的语法纯粹,是典型的纯面向对象思想下产生的语言,因为纯粹,所以简单易于接受。二,Java不仅仅是一门语言,更重要的是一个生态,在重要的方面都有大量人员的支持和很好的解决方案,例如网络编程,企业后台编程,大数据处理,移动应用开发。三,Java的开发体系很完整,代码可维护性,编译时检查,较为高效率的运行效率,跨平台能力,丰富的 IDE,测试,项目管理工具配合。因此Java 语言的综合能力是最好的。
滚滚长江东逝水,浪花淘尽英雄。在Java历史轨迹上,镶嵌着一系列灿烂的巨星,我们来了解一下这些令人高山仰止的人物。
James Gosling
出生于加拿大,在卡内基·梅隆大学攻读计算机博士学位时,他编写了多处理器版本的Unix操作系统。1991年,在Sun公司工作期间,高斯林和一群技术人员创建了一个名为Oak的项目,旨在开发运行于虚拟机的编程语言,同时允许程序在电视机机顶盒等多平台上运行。后来,这项工作就演变为Java。随着互联网的普及,尤其是网景开发的网页浏览器的面世,Java 成为全球流行的开发语言。因此被人称作Java之父。
但是在商业社会,Java之父也对Java的发展充满无力。在离开Oracle公司时写到,“我所说的都关乎细节与诚实,但吐露真相只会带来更多的坏处。”并称,“到处都是有关专利的争吵。律师们的眼睛闪闪发光。”最后James离开了Oracle,继而又离开了Google。去了一家海洋探测机器人的公司。也许在某个海岛,在远望星辰大海的某个地方,你能见到我们的上帝。
Bill Joy
生于1954年,1982年与Vinod Khosla, Scott McNealy和Andy Bechtolsheim一起创建了Sun Microsystems,担任首席科学家,直到2003年离开。他是一位令人崇敬的软件天才,他在软件和硬件的历史上留下了无数令人仰止的传奇。这个其貌不扬的瘦高个,有着凌乱的亚麻色头发,被誉为“软件行业的爱迪生”。在MIT的BBS上曾有一个帖子,问“Who do you think is the best coder, and why?”虽然回复的帖子中大家都声明列举的best coder排名不分先后,然而大多数人仍把Bill Joy列在第一位,或许可以从一个侧面验证Bill Joy在广大Programmer心目中的地位吧。
Joshua Bloch
1961年生人。哥伦比亚大学计算机科学专业学士学位,卡内基梅隆大学计算机科学专业博士学位。在Java刚浮出水面准备施展拳脚的时候,恰逢其时,Joshua Bloch来到了Sun,开始了他带领Java社区步入“迦南美地”的历程。Java每一个重要的版本中都留下了Joshua的手印,也是Java集合框架的创立者。有人说,假如将James Gosling比作Java之父,那么Joshua就是一手将Java 哺育成人的Java之母。他的大作《Effective Java》Java粉丝们一定耳熟能详。该书荣膺2002年度Jolt大奖。
Doug Lea
这个鼻梁挂着眼镜,留着德王威廉二世的胡子,脸上永远挂着谦逊腼腆笑容,服务于纽约州立大学Oswego分校计算机科学系的老大爷。两次Java历史上的大变革,他都间接或直接的扮演了举足轻重的角色。2004年所推出的Tiger。Tiger广纳了15项JSRs(Java Specification Requests)的语法及标准,其中一项便是JSR-166。JSR-166是来自于Doug编写的util.concurrent包。Doug是一个无私的人,他深知分享知识和分享苹果是不一样的,苹果会越分越少,而自己的知识并不会因为给了别人就减少了,知识的分享更能激荡出不一样的火花。他被称之为“对Java影响最大的人。”
Rod Johnson
Spring Framework创始人,著名作者。 Rod在悉尼大学获得了计算机学位,还获得了音乐博士学位。他是JSR-154(Servlet2.4)规范的专家。他看去是一个典型的英国绅士,虽然他出生在澳大利亚,但是现在住在伦敦。人尽皆知的故事就是Spring了。EJB是J2EE的核心技术之一,被称为皇冠上的明珠,而Rod Johnson一个人站起来宣称,根本不需要EJB,撼动了整个JavaEE,改变了历史潮流。Rod Johnson将会引领一种影响深远的潮流。但这潮流不是Spring和Hibernate,也不是IoC和AOP,甚至不是“轻量级架构”,而是一切实事求是的“循证架构”的工作方式。他对很多标准都持怀疑态度,当然最明显的就是EJB,声称如果谁都没有implement过某个技术而直接制定标准绝对是 dangerous的。他是重证千古推倒一时的人物。就像长坂坡的赵子龙,以一人之力而挡十万雄师。
James Duncan Davidson
1997年到2001年在Sun公司工作,他创建了Tomcat应用服务器,这是使用最为广泛的Java Web服务器,同时还创建了Ant构建工具,Ant使用XML来描述项目的构建以及依赖关系,目前仍是Java Web项目构建的事实标准。
Craig R. McClanahan
1960年出生于丹麦Aarhus。Java Server Faces(JSF)技术规范组负责人,Apache Struts framework创始人,Java Studio Creator负责人,《Struts in action》作者。他是servlet 2.2, 2.3和JSP 1.1, 1.2规范的专家组之一,也是Tomcat servlet container Catalina的架构师。
Marc Fleury
在2001年创办了JBoss,这是一个开源的Java应用服务器,后来该软件卖给了红帽公司,然后加入红帽公司继续JBoss的开发,直到2007年2月。
Bruce Eckel
Bruce Eckel是顶级的计算机技术作家,他有超人的表达能力。他是C++标准委员会拥有表决权的成员之一,拥有应用物理学学士和计算机工程硕士学位。他写的《Thinking in Java》成为天字第一号的Java教科书,风靡全球。本书内容丰富—从Java的基础语法到最高级特性,适合各层次的Java程序员阅读,Java在全球的扩展,Bruce功不可没。
Li Gong
宫力在北京出生长大,在清华大学获得计算机科学的学士学位和硕士学位,并在英国剑桥大学获得计算机科学博士学位。1996年,宫力博士加入Sun公司,担任Java首席安全架构师并设计了今天为数百万用户所广泛使用的Java平台安全架构。2001年他回到北京组建中国Sun工程研究院,担任院长。
从对Java的影响来看,宫力还排不上这个名单,不过他是华人里面对Java贡献最大的人,所以我也列在此了。他回到中国后,被称为“Java在中国的最高智慧。”
他的名字Li Gong跟一个女明星(巩俐)的一样,一次他去新加坡,机场方面以为天皇巨星到了新加坡了,机场总裁亲自迎驾,这个一度在Sun公司内部传为笑谈。
学习编程,掌握语法只是入门,真正的提升还是不断练习,用优化的方法解决实际的问题。所以要不停想不停学不停练。
前辈大师总结了很多规律,提出的一些建议,可以再自己的实战过程中去使用。下面我列出《Effective Java》里面的编程建议:
Creating?and?Destroying?Objects
创建和销毁对象
Item?1:?Consider?static?factory?methods?instead?of?constructors.
1??考虑用静态工厂方法替换构造器
Item?2:?Consider?a?builder?when?faced?with?many?constructor?parameters.
2??当遇到多个构造器参数时考虑用构建器(建造者)替换
Item?3:?Enforce?the?singleton?property?with?a?private?constructor?or?an?enum?type?.
3??用私有构造器或者枚举类型强化单例属性
Item?4:?Enforce?noninstantiability?with?a?private?constructor?.
4??通过私有构造器强化不可实例化的能力
Item?5:?Prefer?dependency?injection?to?hardwiring?resources.
5??依赖注入优先硬连接资源
Item?6:?Avoid?creating?unnecessary?objects.
6??避免创建不必要的对象
Item?7:?Eliminate?obsolete?object?references.
7??消除过期的对象引用
Item?8:?Avoid?finalizers?and?cleaners.
8??避免使用终结方法和清理器
Item?9:?Prefer?try-with-resources?to?try-finally.
9??try-with-resources优先try-finally
Methods?Common?to?All?Objects?.
所有对象通用的方法
Item?10:?Obey?the?general?contract?when?overriding?equals.
10?覆写equals时候遵守通用规定
Item?11:?Always?override?hashCode?when?you?override?equals.
11??覆写equals时候总要覆写hashCode
Item?12:?Always?override?toString.
12??始终覆写toString
Item?13:?Override?clone?judiciously.
13??小心覆写clone
Item?14:?Consider?implementing?Comparable.
14??考虑实现Comparable接口
Classes?and?Interfaces.
类和接口
Item?15:?Minimize?the?accessibility?of?classes?and?members.
15?使类和成员可见性最小
Item?16:?In?public?classes,?use?accessor?methods,?not?public?fields.
16??公有类中使用访问方法而非公有域
Item?17:?Minimize?mutability?.
17??使可变性最小
Item?18:?Favor?composition?over?inheritance?.
18??组合优于继承
Item?19:?Design?and?document?for?inheritance?or?else?prohibit?it.
19??要么为继承而设计并提供文档,要么禁止继承
Item?20:?Prefer?interfaces?to?abstract?classes?.
20??接口优于抽象类
Item?21:?Design?interfaces?for?posterity.
21??为后代设计接口
Item?22:?Use?interfaces?only?to?define?types.
22??接口只用于定义类型
Item?23:?Prefer?class?hierarchies?to?tagged?classes.
23??类继承优于标签类
Item?24:?Favor?static?member?classes?over?nonstatic.
24?优先考虑静态类而不是非静态
Item?25:?Limit?source?files?to?a?single?top-level?class.
25??将源文件限制为单个顶级类
Generics
泛型
Item?26:?Don’t?use?raw?types.
26??不要使用原生类型
Item?27:?Eliminate?unchecked?warnings.
27??消除非受检警告
Item?28:?Prefer?lists?to?arrays.
28??list优于数组
Item?29:?Favor?generic?types.
29??优先考虑泛型
Item?30:?Favor?generic?methods.
30??优先考虑泛型方法
Item?31:?Use?bounded?wildcards?to?increase?API?flexibility.
31??使用有界通配符提升API的灵活性
Item?32:?Combine?generics?and?varargs?judiciously.
32??小心组合泛型和可变参数??@
Item?33:?Consider?typesafe?heterogeneous?containers.
33??优先考虑类型安全的异构容器
Enums?and?Annotations.
枚举和注解
Item?34:?Use?enums?instead?of?int?constants.
34?用enum代替int常量
Item?35:?Use?instance?fields?instead?of?ordinals.
35??用实例域代替序数
Item?36:?Use?EnumSet?instead?of?bit?fields.
36??用EnumSet代替位域
Item?37:?Use?EnumMap?instead?of?ordinal?indexing.
37??用EnumMap代替序数索引
Item?38:?Emulate?extensible?enums?with?interfaces?.
38??用接口模拟可扩展的枚举
Item?39:?Prefer?annotations?to?naming?patterns.
39??注解优于命名模式
Item?40:?Consistently?use?the?Override?annotation.
40??统一使用Override注解
Item?41:?Use?marker?interfaces?to?define?types.
41??用标记接口定义类型
Lambdas?and?Streams.
Lambda表达式和流
Item?42:?Prefer?lambdas?to?anonymous?classes.
42?Lambda表达式优于匿名类
Item?43:?Prefer?method?references?to?lambdas.
43??方法引用优于Lambda表达式
Item?44:?Favor?the?use?of?standard?functional?interfaces.
44??优先使用标准的函数式接口
Item?45:?Use?streams?judiciously.
45??小心使用流
Item?46:?Prefer?side-effect-free?functions?in?streams.
46??流中优先使用无副作用的函数
Item?47:?Prefer?Collection?to?Stream?as?a?return?type.
47??返回类型Collection优先流
Item?48:?Use?caution?when?making?streams?parallel.
48??当创建并行流的时候小心些
Methods.
方法
Item?49:?Check?parameters?for?validity.
49??检查参数的有效性
Item?50:?Make?defensive?copies?when?needed.
50??需要时进行保护性拷贝
Item?51:?Design?method?signatures?carefully.
51??小心设计方法签名
Item?52:?Use?overloading?judiciously.
52??谨慎使用重载
Item?53:?Use?varargs?judiciously.
53??谨慎可变参数
Item?54:?Return?empty?collections?or?arrays,?not?nulls.
54??返回空集合或者数组,而不是null
Item?55:?Return?optionals?judiciously.
55??谨慎返回Optionals
Item?56:?Write?doc?comments?for?all?exposed?API?elements.
56??为所有导出的API元素写文档注释
General?Programming
通用程序设计
Item?57:?Minimize?the?scope?of?local?variables.
57??最小化局部变量作用域
Item?58:?Prefer?for-each?loops?to?traditional?for?loops.
58??for?each优于传统for循环
Item?59:?Know?and?use?the?libraries.
59??了解和使用类库
Item?60:?Avoid?float?and?double?if?exact?answers?are?required.
60???如果需要精确答案,避免使用float和double
Item?61:?Prefer?primitive?types?to?boxed?primitives.
61??基本类型优于装箱类型
Item?62:?Avoid?strings?where?other?types?are?more?appropriate.
62??如果其他类型更合适,避免使用String
Item?63:?Beware?the?performance?of?string?concatenation.
63??小心String连接性能
Item?64:?Refer?to?objects?by?their?interfaces.
64??通过接口引用对象
Item?65:?Prefer?interfaces?to?reflection.
65??接口优于反射
Item?66:?Use?native?methods?judiciously.
66??谨慎使用本地方法
Item?67:?Optimize?judiciously.
67??谨慎优化
Item?68:?Adhere?to?generally?accepted?naming?conventions.
68??遵守普遍的命名规范
Exceptions
异常
Item?69:?Use?exceptions?only?for?exceptional?conditions.
69??只针对异常情况才使用异常
Item?70:?Use?checked?exceptions?for?recoverable?conditions?and?runtime?exceptions?for?programming?errors.
70??对可恢复的情况使用受检异常,对编程错误使用运行时异常
Item?71:?Avoid?unnecessary?use?of?checked?exceptions.
71??避免不必要使用受检异常
Item?72:?Favor?the?use?of?standard?exceptions.
72??优先使用标准异常
Item?73:?Throw?exceptions?appropriate?to?the?abstraction.
73??抛出与抽象对应的异常
Item?74:?Document?all?exceptions?thrown?by?each?method.
74??每个方法抛出异常要有文档
Item?75:?Include?failure-capture?information?in?detail?messages.
75??在细节信息中包含捕获失败的信息
Item?76:?Strive?for?failure?atomicity.
76??努力使失败保持原子性
Item?77:?Don’t?ignore?exceptions.
77??不要忽略异常
Concurrency
并发
Item?78:?Synchronize?access?to?shared?mutable?data.
78??同步访问共享可变数据
Item?79:?Avoid?excessive?synchronization.
79??避免过度同步
Item?80:?Prefer?executors,?tasks,?and?streams?to?threads.
80??executors,task,stream优于线程
Item?81:?Prefer?concurrency?utilities?to?wait?and?notify.
81??并发工具优于wait和notify
Item?82:?Document?thread?safety.
82??线程安全文档化
Item?83:?Use?lazy?initialization?judiciously.
83??慎用延迟初始化
Item?84:?Don’t?depend?on?the?thread?scheduler.
84??不要依赖线程调度器
Serialization
序列化
Item?85:?Prefer?alternatives?to?Java?serialization.
85??考虑其他可选择优于Java序列化
Item?86:?Implement?Serializable?with?great?caution.
86??谨慎实现Serializable接口
Item?87:?Consider?using?a?custom?serialized?form.
87??考虑使用自定义序列化形式
Item?88:?Write?readObject?methods?defensively.
88??保护性编写readObject方法
Item?89:?For?instance?control,?prefer?enum?types?to?readResolve.
89??对于实例控制,枚举优于readResolve
Item?90:?Consider?serialization?proxies?instead?of?serialized?instances.
90??考虑序列化代理替换序列化实例??
“学不可以已。”当年我们听说James Gosling还要看Java编程的书诸如《Effective Java》这一类的时候,我们很惊奇。很多程序员会觉得Gosling应该不用看什么书了,事实上,他要看的。开卷有益,不同的人有不同的思路,博闻广识,就会不断进步,终成大器。
学习进步的法门,只在专心一途。现今社会的诱惑很多,让人很难安心踏实下来钻研一门技术,而获取信息太过便利,海量的信息反而让人无所适从。但是须知“弱水三千,取一瓢饮”,人生而有涯,只有静心钻研一门学问才能学有所成。《三字经》里面就讲到:教之道,贵以专。只要我们志向高远,就能不惧风雨不畏人言,不随波逐流。“天下有大勇者,卒然临之而不惊,无故加之而不怒。此其所挟持者甚大,而其志甚远也”(苏轼·《留侯论》)
有了专心的方向,然后就从低到高,沿着台阶一步一个脚印,课题解决一个就是一个,积累下来就不得了,一而十,十而百,百而千,千而万。转首回望,我们已经一览众山小。
大家要有心理准备,这是一个漫长而艰苦孤独的历程。一个完整的过程是起步于孤愤的立志,中间是艰难的跋涉,终结于喜悦的心得。王国维《人间词话》语:
古今之成大事业、大学问者,必经过三种之境界: “昨夜西风凋碧树,独上高楼,望尽天涯路。” 此第一境也。 “ 衣带渐宽终不悔,为伊消得人憔悴。” 此第二境也。 “ 众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。”此第三境也。
任重道远,君子当自强不息。
内容总结
以上是互联网集市为您收集整理的Java语言十五讲(总结)全部内容,希望文章能够帮你解决Java语言十五讲(总结)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。