- 第一章:对象导论
- 访问控制的优点(P5):防止类库代码被使用的程序员修改,且方便类库的作者进行修改
- 代码复用是面向对象程序设计语言所提供的最了不起的优点之一,一般需要丰富的经验和敏锐的洞察力才可以设计出一个可供复用的对象
- 多用组合,简单灵活;继承虽然重要,但是不能滥用,要在合适的地方用(具体哪里合适还不清楚)
- 单根继承结构:所有对象都有一个基类Object,这样的好处是由于所有对象都保证具有基类的类型信息,因此不会因无法确定对象的类型而陷入僵局。这对于系统级操作(如异常处理)显得尤为重要
- ArrayList和LinkedList的区别(P12);参数化类型,向下转型,eg:ArrayList< String >
- 第二章:一切都是对象
- 虽然一切都是对象,但是操作的标志符实际上是对象的一个“引用”;比如遥控(引用)和电视机(对象)。举个例子:String s;此时s只是一个引用,因为没有指向任何对象,如果这时获取s的内容就会出错,所以一般建议:创建一个引用的同时进行初始化
- java的存储(P22):堆栈–存储基本类型数据;堆–用来存放所有的java对象;常量存储–存储常量值;非Ram存储–存放流对象和持久化对象,其中流对象就是字节流,主要用来发送给另一台机器;持久化对象就是保存在磁盘上,比如JDBC
- 作用域:出了大括号,引用就没了,但是对象还在内存中,以后会被GC回收,比如:{String a = “a”;} String a = “b”;//此处可以定义a引用,因为上面的a引用已经超出作用域不存在了
- 默认值:如果是类的成员变量,那些基本类型就有默认值。比如int=0,float=0.0,double=0.0;但是如果不是某个类的字段,就不能初始化,比如在某个方法内部,就会是随机数,但是直接输出的话,会提示该变量没有初始化。
- 第三章:操作符
- java没有sizeof,C和C++中的sizeof主要是为了移植,因为有的机器有的类型是32位,到了其他机器可能是16位,但是在java 中不存在这样的情况,因为数据类型在所有的机器中大小都是一样的
- 第五章:初始化与清理
- 关于垃圾回收:如果java虚拟机并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收以恢复内存的。因为垃圾回收本身也是需要开销的
- finalize()方法:
- 该方法是用来清除无用的对象的,但是跟c++中的析构函数不同,因为该方法随着垃圾回收而被调用,而垃圾回收又不一定会被调用。
- 且,该方法不常用,不常用,只有一种情况使用它:就是在使用“本地方法”的情况下。本地方法是一种在java中调用非java代码的方式
- 枚举:enum,其实就是一个跟类class类似的结构,不过有亮点要注意–1,必须在单独的java文件中定义enum;2,enum可以用于switch中
- 第十章:内部类
- 可以用private和protected来修饰,一般的类只能是public和默认值friendly即包访问权限。
- 主要作用是为了实现多重继承;因为一个类只能继承一个抽象类或其他类,虽然可以通过接口实现多个子类,但是因为要实现所有的方法,比较麻烦,这时内部类的好处就体现出来了。比如一个类,有2个内部类,分别继承类1和类2,这样这个类就实现了多重继承
- 避免修改接口而导致同一个类中两种同名方法的调用 :比如一个类继承了一个类,又实现了一个接口,此时如果父类和接口类有重名的方法,就会出错,但是又了内部类,就可以通过内部类来实现那个接口
- 多用于回调;new B(){public void test(){…} }
- 第十一章:持有对象
- ArrayList和linkedList的区别:
- 随机访问方面(比如get和set),ArrayList要优于LinkedList,因为后者要移动指针
- 插入和删除,后者优于前者,因为前者要移动数据
- 一次给容器添加多个元素:
List<String> list1 = new ArrayList<String>(Arrays.asList("a","b","c"));
list1.add("a");
List<String> list2 = new ArrayList<String>();
Collections.addAll(list2, "a","b","c");
List<String> list3 = new ArrayList<String>();
list3.addAll(list1);
- 迭代器Iterator:用来遍历容器,跟foreach类似,但是Iterator有以下两点好处:
- 遍历的同时可以修改容器内的对象
- iterator类似一个接口,不需要关心容器的底层信息,只需要通过hashNext()和next()就可以遍历容器;比如下面的代码:接受对象容器并传递它,从而在每个对象上都执行操作,这种思想很强大,贯穿java全程
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("a");
arrayList.add("b");
LinkedList<String> linkedList = new LinkedList<String>(arrayList);
HashSet<String> hashSet = new HashSet<String>(arrayList);
display(arrayList.iterator());
display(linkedList.iterator());
display(hashSet.iterator());
}
public static void display(Iterator it)
{
while(it.hasNext())
{
System.out.println(it.next());
}
}