趁着年三十的最后一段时间,发最后一篇文章吧!首先祝CSDN博主们新春快乐,过个快乐吉祥的新年,来年心想事成,美梦成真!好话先摆前面,呵呵~~~
Java 语言 学习总结
经过近一年的学习,终于将《ThinkingInJava》的大半部分看完,应该是入门了,能够向更高级进发了。在此,借助Java语言和C语言所拥有的特性,对编程语言的特性做个总结和归纳,以便更快地学习和熟悉新的语言。
学习一种新语言,通常可以从下述几个方面来考察新语言,求同存异。绝大部分语言都具备非常相似的特性,彼此相互借鉴,相互促进和完善;主要的不同,一个在于编程思想和视角,一个在于语法细节。此外,要熟悉各种语言的惯用法。
一、 编程思想和视角:该语言通过什么来对现实实体进行建模?
[1]面向过程:将现实世界看成是过程的集合,数据流在过程的“工厂”中穿梭流动,最终生成预期结果。面向过程的软件结构通常使用管道和重定向机制,文本文件是有力的数据载体。
[2]面向对象:将现实世界看成是对象的集合;所有的活动均由对象及其联系、交互而完成。相比面向过程,面向对象的视角更切近现实生活,概念较易理解,主要的目标是使软件具备更高的可维护性和可管理性,代价是执行效率稍微降低了些,系统复杂性也增加了。
[3]特殊视角:比如LISP,是一种表处理语言,将现实中的事物建模为列表,并提供完善的表处理能力。特殊视角的语言通常在特殊场合非常有用,并且能够提供一些新颖的理念。
二、 强类型语言还是弱类型语言?
强类型语言通常在编译期和运行期提供对程序中的变量严格的类型检查,以保证安全可靠的编程;而弱类型语言则更注重便捷高效地编程和处理。
通常,脚本语言是弱类型语言,对变量类型的声明和检测很宽松,比如Javascript,shell, perl, php等;而用于大型程序的编程语言主要是强类型语言,比如C,C++, Java等
三、 基本特性:
[1] 基本数据类型(通常由底层硬件直接支持)
[2] 操作符与表达式(算术、逻辑、关系、赋值、位运算、自增减、条件运算符、引用、类型转换)
[3] 控制语句 (顺序、条件、循环)
[4] 程序模块化单元(函数、对象、结构)
[5] 数组(最便捷常用的数据结构)
[6] 枚举类型(特别有用的特性补充)
[7] 字符串处理(程序开发中的最最常见操作)
[8] I/0处理(输入输出处理)
[9] 系统交互(系统调用,访问系统资源)
四、扩展特性:
[1] 自定义类和类型(面向对象语言的基本支撑)
[2] 继承与多态(面向对象语言的重要特性)
[3] 泛型与模板(通用类型处理的特性)
[4] 错误处理(编写健壮可靠程序的必不可少机制)
[5] 容器(数据、对象的集合及操作,编写中大规模程序的有力工具)
[6] 代码组织(组织、管理大型程序的规范机制)
[*] 源代码注解(使源码文档化,便于同步和管理)
[*] 运行时类型信息RTTI(运行时能够获取类型信息,有利有弊的特性)
[*] 指针(最令人纠结也最令人难以忘怀的语言特性)
五、高级特性:
[1] 并发 [2] 网络 [3] GUI
六、第三方支持:
[1] 标准库 [2]软件开发包 [3]应用框架 [4] 应用模块 [5] 开发社区
七、 未来可能的特性?
是否应当将并发计算、网络处理、嵌入式特性作为语言内置特性? 如果将其作为内置特性,则语言通用性可能略微降低,而在特定领域的应用则更具优势和竞争力。在CSDN论坛上看到一句话,觉得很有道理:未来编程语言的趋势将可能在分工上越来越细,各有用武之地,合而分之,分而合之。
PS:学习一门新的编程语言三部曲:
1. 第一曲: 学习使用该语言编写程序,熟悉它所提供的基本特性和基本用法;
2. 第二曲: 学习使用该语言编写职业水准的程序,掌握使用该语言的惯用法和思想;
3. 第三曲: 使用该语言及相关工具编写中型或大规模的软件,探索应用架构。
编程语言的使用学习模式:
变量 ---> 数据类型 ---> 控制流 ---> 函数与结构(类、接口与方法) ---> 模块(包) ---> I/O 操作
---> 容器 ---> 异常 ---> 并发 ---> GUI ---> 标准库、SDK ---> 开发框架
(1) 先概览一遍,了解其语法的大致情形,然后可基于现有编程语言经验加上试错法一步步掌握;
(2) 对于有较多编程经验的人,应先大量阅读源码示例,有一个阅读基础,然后写起来更顺利。
-----------------------------------------------------------------------------------------------------------------------------------------------------
Java 编程基础
检验清单 -----------------------------------
1. 基本的面向对象概念:
① 实体抽象: 类与对象; 属性与方法; 操作与服务;
② 实体联系: 组合与继承,代理
③ 行为: 继承与多态
④ 程序构造: 一系列对象的交互;
使用构造器创建对象,调用对象方法获取服务,组合服务和对象通信以完成任务。
2. 类与对象的基本概念和用法:
① 掌握定义类(新的数据类型)的方法:创建属性字段与成员方法【数据与逻辑】;
② 掌握构造器的用法及规则;掌握方法重载的使用;
③ 创建对象引用来操作对象;
④ 几个关键字的含义和用法: this, static, new
3. 操作符与控制流
① 熟悉 Java 操作符及其优先级【仅在极偶尔的时候才去查表】;
② 掌握 Java 的控制流:
Boolean 表达式,if-else, switch, for, while, foreach, break, continue, label; 条件;迭代
③ 操作符和控制流是 Java 类与对象的实现支撑。
4. 初始化与清理
① 创建并正确地初始化程序中所有的对象;掌握finalize方法完成必要的清理工作。
② 正确使用构造器和初始化语句块来完成合理的初始化;
③ 掌握各种初始化方法以及各种类型的对象的初始化。
5. 代码组织和访问权限
① 包【package】的概念与代码组织
② 访问权限:默认权限,public, protected, private
6. 复用现有类的方式
① 以组合的方式复用现有类;以继承的方式复用现有类;组合与继承的设计选择;
② 掌握派生类构造器的正确创建和使用;
③ 在子类中覆写方法;使用多态来实现行为的多样性;
④ 几个关键字: protected, final
7. 接口的使用
① 创建与实现接口;声明与实现的完全解耦;使用接口应对实现的变化;
② 接口与抽象类的联系和区别,用法与场合;
③ 使用接口实现多重继承;
④ 接口中的字段;
⑤ 适配器模式和工厂模式。
8. 内部类的使用
① 能够基本地使用内部类:定义和使用内部类,熟悉相关语法;
② 在内部类中实现接口并将内部类声明为私有的:使其它外部类享用该私有内部类提供的服务,同时保持内部类的完全不可见性【仅对该内部类的外部类可见】。
③ 在方法和作用域中使用内部类;匿名内部类的使用;了解嵌套类;
9. 异常与错误处理
① 异常的基本用法:
抛出与捕捉异常;重新抛出异常;异常链;异常匹配;
try-catch-finally 语句块;throw语句;throws 方法异常说明
② 通过使用异常捕捉各种程序出错情形,从而提高程序的健壮性;
③ 创建自定义的异常;异常与记录日志;
④ 方法中的异常说明;子类方法的异常说明限制;
⑤ 了解Java标准异常;
⑥ 关键字 finally 的使用;
10. String 字符串
① String 的基本用法:创建和使用String 对象及其常用方法;
② 格式化输出功能;
③ 正则表达式的概念和用法
11. 数组 与 Arrays
① 掌握一维数组的用法:
能够正确地创建和初始化数组;掌握使用数组进行存储和访问;返回数组;
② 熟悉和掌握类Arrays 的一些功能: 数组打印、排序等
12. 使用容器
① 熟悉常用的容器接口与容器类的特性:
接口:Collection, Iterator, List, Set, Map, SortedSet, SortedMap,
实现类:
ArrayList,LinkedList, HashSet, LinkedHashSet,TreeSet, HashMap, LinkedHashMap, TreeMap
② 掌握容器的常用功能和遍历。
13. 泛型
掌握泛型的基本用法和语法:声明和实现泛型接口; 使用实现了泛型接口的类;
14. 类型信息
掌握基本的RTTI知识;了解Class对象和反射机制。
15. Java IO
① 掌握从标准输入、指定文件读取数据的方法;
将数据写入标准输出、指定文件的方法;输入输出重定向;
② 了解 Java IO 系统的类层次结构和设计思想;理解装饰器模式;
③ 理解如何组合各种流对象获取具有所期望行为的流对象;掌握使用 Java IO 库的方法;
16. 并发编程
能够编写基本的多线程程序;理解线程执行机制。
17. GUI编程
① 熟悉构造GUI程序的方法及其机制;了解观察者模式。
② 初步了解和使用Swing组件及事件模型。
18. Java 编程风格和规范:
命名规范、文档注释、程序排版等
学习方法:
1. 掌握基本概念和用法;
2. 善于查阅JDK文档。
Java 进阶:
① 使用 Java 编写程序, 完成各种各样的困难的、充满想象力的任务,以提高编程能力和锻炼思维能力;同时,在这个过程中,更加深入地去钻研相应的语言特性和设计思想。
② 学习设计模式及其用法;线程编程;代码重构、单元测试。