ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java语言十五讲(总结)

2021-02-25 20:01:06  阅读:177  来源: 互联网

标签:总结 Use Java Prefer judiciously Item 十五 优于


讲完了。你们或许会问,难道这十几讲就涵盖了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应该不用看什么书了,事实上,他要看的。开卷有益,不同的人有不同的思路,博闻广识,就会不断进步,终成大器。
学习进步的法门,只在专心一途。现今社会的诱惑很多,让人很难安心踏实下来钻研一门技术,而获取信息太过便利,海量的信息反而让人无所适从。但是须知“弱水三千,取一瓢饮”,人生而有涯,只有静心钻研一门学问才能学有所成。《三字经》里面就讲到:教之道,贵以专。只要我们志向高远,就能不惧风雨不畏人言,不随波逐流。“天下有大勇者,卒然临之而不惊,无故加之而不怒。此其所挟持者甚大,而其志甚远也”(苏轼·《留侯论》)
有了专心的方向,然后就从低到高,沿着台阶一步一个脚印,课题解决一个就是一个,积累下来就不得了,一而十,十而百,百而千,千而万。转首回望,我们已经一览众山小。
大家要有心理准备,这是一个漫长而艰苦孤独的历程。一个完整的过程是起步于孤愤的立志,中间是艰难的跋涉,终结于喜悦的心得。王国维《人间词话》语:
古今之成大事业、大学问者,必经过三种之境界: “昨夜西风凋碧树,独上高楼,望尽天涯路。” 此第一境也。 “ 衣带渐宽终不悔,为伊消得人憔悴。” 此第二境也。 “ 众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。”此第三境也。

任重道远,君子当自强不息。

标签:总结,Use,Java,Prefer,judiciously,Item,十五,优于
来源: https://blog.csdn.net/qqqqqqhhhhhh/article/details/114102658

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有