1.1 抽象过程
编程就是建模过程,早期的汇编语言是专门针对机器设计的,需要在要解决的问题和机器之间建立模型。
1. 万物为对象
2. 程序是对象集合,相互通过发送消息来调用
3. 可以继承
4. 每个对象都是某个类的实例
5. 特定类型的所有对象可以接收同样的消息
1.2 每个对象都有一个接口
通俗的说就是对象都有method
1.3 每个对象都提供服务
许多的method组成了服务
1.4 被隐藏的具体实现
类创建者和客户端程序员,private,protected,public
1.5 复用具体实现
直接使用,组合,继承
1.6 继承
通过覆盖或增加新的methond,is-a(只是覆盖),is-like-a(新方法)
1.7 多态的可互换对象
动态绑定
1.8 单根继承结构
相比于C++,更容易实现GC,
创建一组类时,更容易使用其它类提供的接口,C++中可能得用多重继承
1.9 容器
我们需要的只是一个用来存放对象的抽象概念,在具体的实践中会有不同的要求,如Map,List,Vector。
参数化类型,Java中引入的新概念,由编译器实现,在1.4版以前,元素放入容器中会转型成Object,取出又要转成原来的类型,现在可以创建只能保存某种元素的容器。
1.10 对象的创建和生命期
使用单根继承和对象都在堆上分配使得Java的GC实现起来相对简单。
C++的智能指针?
1.11 异常处理,处理错误
异常使错误处理相对容易,在C中是使用返回值,如果有内存读写错误~ ~
1.12 并发编程
Java内置支持
1.13 Internet
Internet的基础就是 客户端/服务器 模式,要尽量减少服务器的工作量,脚本语言可完成80%工作,剩下的20%可以由applet或Flex(flash)。Java在服务器编程有优势。
1.14 总结
评估需要用什么语言,可以看看python。
5 初始化与清理------------------------------------------------------------------------------
可以在构造函数中调用
finalize(),在垃圾回收时调用,1.什么时候回收不明确,可能永远都不会回收 2.回收只与内存有关
可以用在如调用了C++ new,在finalize()里面调用delete,或用来检查系统资源是否释放(文件是否关闭)
Java的虚拟机会先向系统请求一大块空间,new的时候只要改变一下指针就可以,相当于在栈上分配,速度很快,垃圾回收有两种策略,停止——复制,标记——清扫
变参函数 void print(Object... args); print("one", "two", "three");
枚举是一个类型,可用在switch语句中
7 构造器------------------------------------------------------------------------------------
8 多态--------------------------------------------------------------------------------------
Base { "base" }
Advense extends Base {
String str = "str"
Advense() { "adv" }
}
结果 base str adv
类的构造函数中可以调用重载的方法,并且是多态的,要注意数据初始化
子类可以覆盖父类的方法并改变方法的返回值(但返回值要是父类返回值的子类型)
Java的转型都会做检查
9 接口-----------------------------------------------------------------------------------
抽象类是不希望实例化的类,
接口是类与类之间的约定,不做任何实际的工作,成员变量为final型
策略模式,根据传入的类不同
适配器将一个类的接口包装了起来
抽象类的耦合比接口强,
接口部分的解决了多重继承问题,因为接口是没有实现的方法,可以解决菱形继承的问题
放入接口中的data自动成为static和final
实现工厂模式,(工厂模式和策略模式有什么不同?)
10 内部类---------------------------------------------------------------------------------
内部类实际上实现了多重继承
11 持有对象-------------------------------------------------------------------------------
容器内能只放置类,由于单根继承,可以写 ArrayList list = new ArrayList();
初始化加入多个元素 new ArrayList<Integer>(Arrays.asList(1, 2, 5))
ArrayList, LinkedList,
HashSet, TreeSet, LinkedHashSet,
HashMap, TreeMap, LinkedHashMap,
12 异常--------------------------------------------------------------------
什么时候要使用异常?比如对一个函数的参数做检查要使用异常吗?
异常处理理论上有两种模型,一种是终止模型,一种是恢复模型,但由于恢复模型太复杂,一般不用
自定义异常类很简单,直接继承Exception,写一个无参和一个String参数的构造函数就可以了
异常是new出来的,垃圾回收器会自动清理它,相比C++要容易多了
finally用于做无论是否抛出异常都一定要做的事,如关闭打开的文件
异常的优点在于对错误处理的一致性上,只要不吞咽下错误,你就一定能发现错误
13 字符串------------------------------------------------------------------
字符串是不可变的常量
用于String的+,+= 是Java中仅有的重载操作符,调用了StringBuilder
如果是用循环语句拼接字符串,最好在循环中使用StringBuilder
要学习 正则表达式
14 类型信息----------------------------------------------------------------
JVM加载一个类的过程, 加载 链接 初始化
RTTI:编译时类已存在
反射:运行时类才存在
RTTI在实际编程中的使用:传统的类型转换,查询类型的信息,instanceof
15 泛型--------------------------------------------------------------------
元组的实现
非泛型类可以使用泛型方法 <T> void f(T t)
在对象转化成泛型对象时会擦除自身的信息,只能将泛型当作Object
16 数组--------------------------------------------------------------------
数组相对于容器,唯一的优点是效率
除非经过测试证明容器是瓶颈且换成数组能大大提高效率,否则应该使用容器
17 容器深入研究------------------------------------------------------------
18 Java I/O系统------------------------------------------------------------
主要讲类库中的类
19 枚举类型----------------------------------------------------------------
20 注解--------------------------------------------------------------------
21 并发---------------------------------------------------------------------
22 Swing-------------------------------------------------------------------
现在就看这么多了,暂时不再系统的看了,2010.8.19