首页 > 编程语言 > 详细

【Thinking in Java】读书笔记1

时间:2017-02-28 19:43:18      阅读:141      评论:0      收藏:0      [点我收藏+]

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6480258.html

第三章:操作符

1:基本数据类型的比较用 ==、!=,引用类型的==、!=是针对地址的比较。适用于所有对象(引用类型)的比较函数是equals()。

2:短路:判断条件只需有一条使得判别式为真或为假,余下的就不会再执行。比如:1||a op b,读取到1时即可判定为真,后面的不再进行执行。

3:移位运算只能作用于int数据类型。其他类型要转为int才能进行移位。

4:类型转换:低——>高,自动对齐;高——>低,强制转换。

5:浮点数转换为int默认截尾(即直接去除小数部分),要四舍五入的话需要用到round()函数。

 

第五章:初始化与清理

1:以基本类型的参数不同进行重载的函数,在调用时容易由于数据类型的向上转换而造成混淆。在调用参数为基本数据类型的函数时,定义时所用参数的类型大于等于实际参数类型的函数都会被调用。比如:f(int i)、f(float i)、f(double i),在调用时传 f(5),则以上三个函数都被执行。所以,为了避免混淆,一般在实际调用时对参数进行窄化处理,显式声明数据类型。

2:不能以返回值区分重载方法:编译器根据代码语境来进行重载方法的选择,但如果调用函数时只是在单独一行调用而没有赋值号,则无法区分所处环境需要什么返回类型,也就无法进行相应的调用了。

3:默认构造器:如果自定义的类中没有构造函数,编译器会自动创建。而如果进行了构造函数的重载,则默认构造函数也需要自己定义。

4:在构造函数中调用另一个构造函数,只需用 this.(参数) 即可。注意,这一句必须位于所定义的构造函数的最顶行。

5:static方法没有this指针,因为static没有特定的对象,所以没有this调用。

6:Java垃圾回收器只会回收new关键字分配内存的对象,并且只有在内存不够时才进行垃圾回收。那么在某些对象使用完后如果想要手动清楚,可以在对象的类中定义finalize()函数进行销毁操作。在使用完对象后调用finalize()方法即可。否则,存储空间不够话容易造成内存泄漏。

7:垃圾回收器的工作:

    1)引用计数法:每个对象有一个引用计数器,每当有一处引用执行该对象时就加一。当某个对象的引用计数为0时,就释放这个对象。

    2)停止—复制法:先暂停程序的运行,然后将所有存活的对象复制到另一个堆,那么没有被复制的就是垃圾。

    3)标记—清扫法:遍历所有引用,每当找到一个存活的对象就给对象一个标记。在全部标记完成后,清理动作才开始,没有标记的对象全部被释放。

8:类的每一个基本数据类型的成员都会有有一个初始值,默认为0;引用类型默认为null。当然,进行了初始化赋值则除外。

9:enum类型的一个使用:用于switch(enum)—case ENUM_X。

 

第六章:访问权限控制

1:根据包路径唯一确定类。

2:一个java源文件成为一个编译单元,一个编译单元内只能有一个public类。处于编译单元内的非public类主要为主public类提供支持,对包外是不可见的。

3:在导入了不同包中的同名类时,需要用   完整的包路径.类名  来指定使用那个类。

4:使用自己创建的工具类库(jar包):自己定义工具类,放入一个包中——把包路径添加到ClassPath下——在使用时,import包,创建对象调用方法即可。一切工具包都是从ClassPath根目录开始查询的,所以必须配置到ClassPath下。

5:Java访问权限修饰词:

6:类的访问权限:

 

第七章:复用类

1:代码复用的方法有两种:组合、继承。

2:惰性初始化:在需要使用对象时才进行对象的初始化。

3:Java不支持多继承,但可以纵向“多层继承”。如: B extends A,C extends B,D extends C。而在创建D时,是按A-B-C-D的顺序执行构造函数的。

4:导出类构造函数中调用基类构造函数,只需用 super(参数) 即可。//区分重载构造函数中调用别的构造函数:this.(参数)

5:代理:用组合包含一个类对象,然后定义一系列public方法供外界调用时,方法内部其实是用组合的对象调用其方法来实现的。这样做的目的是,不让外界访问到组合的私有类对象,起到保护作用。

6:析构子类:在子类中自定义了类似与析构函数的方法时,切记要在子类的“析构函数”中调用父类的“析构函数”,否则子类对象销毁了而它指向的父类对象还在。因为创建子类时,是先创建它的父类再创建子类对象的(因为子类创建时需要调用父类的方法)。

7:向上转型:用基类指向导出类对象,然后调用被导出类重写了的方法,但不能调用导出类新增的方法。

8:final关键字:

    1)用final修饰的基本数据类型变量值不可以被改变;而final修饰的引用对象,其指向不能被改变,但是指向的对象的内容是可变的。

    2)函数的参数列表中,用final修饰的参数在函数中不能被修改。这在匿名内部类的使用时尤其有用,匿名内部类只可以使用函数所传内容但不能修改他们。

    3)final修饰方法:则继承该类的导出类中不能重写该方法。(类中private的方法都隐式地被指定为final的,所以子类中也无法覆盖它。也就是说,在子类中非private的方法才能被覆盖)

    4)final修饰类:被final修饰的类不允许被继承。

9:所有的static代码在类加载时按照代码顺序依次初始化,而且只会初始化一次。只有就一直存在于内存中供调用。

10:执行顺序:

    1)编译器加载类时执行:由父—>子顺序,按代码顺序把static代码依次加载到内存并进行初始化操作(赋值、计算、输出等);

    2)在子类被创建时执行:由父—>子顺序执行构造函数,调用相应方法;

 

第八章:多态

1:多态,也叫动态绑定,后期绑定,运行时绑定;

2:再论向上转型的使用:基类提供调用的规范定义,导出类进行具体的实现。向上转型根据子类类型进行相应的方法调用;

3:多态运行时分析方法:对于导出类运行时调用的到底是父类的成员、方法还是子类的,如何分析?我们可以把父类中的成员、函数复制到子类代码中去,然后把与子类同名的非private内容去掉(因为被子类中的同名内容覆盖了。而private的相当于没复制过来,此时子类中同名的内容相当于新增的),剩下的就是父类中在子类仅存的内容。然后根据运行时调用的成员、函数是属于父类部分还是子类部分即可进行相应调用并得出结果。

4:父类中static修饰的方法在子类中不会被覆盖。所以子类对象调用时执行的是父类中该静态方法的代码。

5:再论对象的清理:如果手动定义类对象的清理工作,我们需要在子类的“析构函数”中也调用父类的“析构函数”来清除子类引用的父类对象。但是如果创建子类时通过传递一个父类对象进来而进行的子类创建,那么有可能一个父类对象被多个子类对象引用,这样的话子类的“析构函数”就不是单纯的清除引用的父类对象了,而是改变父类对象的引用计数器并调用父类的“析构函数”。而父类的“析构函数”先检查引用计数器,为0才进行父类对象的清楚。

6:协变返回类型:导出类中覆盖基类的方法时,返回类型可以是基类中同名方法的返回类型的子类。比如:A中f()返回X;B继承A重写f()返回Y,Y是X的子类。

7:纯继承:导出类只重写了基类定义的方法,而没有增加任何内容。

8:运行时类型识别(RTTI):

 

第九章:接口

 

【Thinking in Java】读书笔记1

原文:http://www.cnblogs.com/ygj0930/p/6480258.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!