Think In Java之面向对象(4-8章)

本文深入探讨Java中的构造器、方法重载、多态等关键概念,解析类与接口的初始化顺序,以及如何正确使用final和this关键字。同时,介绍了垃圾回收机制的不同策略,并对比了Java与C++在内存管理上的差异。
 

1.      在构造器中初始化类的字段。构造器不允许返回任何值,这与void不同。

2.      每一个重载方法必须有一个独一无二的参数类型列表。返回值不同不会引起方法的重载。

3.      重载方法时,如果形参的类型比实参的类型小,则会进行提升。Char如果找不到合适的方法,则会提升到int

4.      this关键字只能在方法内部用,表示“调用这个方法的对象”的引用。如果在方法内部调用同一个类的方法,则不必用this

5.      除了在另一个构造器中,其他方法不允许调用构造器。

6.      在构造器中调用另一个带参构造器。如:Flower(){this(24,”aaa”);}

7.      不要过多的使用finalize()函数。而且一定不能调用它。

8.      c++在堆上分配空间是查找可用空间之后再分配,java的堆分配内存是分配下一个可用的空间而不进行查找,并有垃圾回收器的配合。这种方式如同c++在堆栈上分配内存。

9.      垃圾回收机制。停止-复制:查找所有引用的活的对象,并从一个堆复制到另一个新的堆,然后把原来堆中的垃圾清除。标记-清除:标记所有活的对象,并把死的对象清除。两者都在程序停止的情况下运行。Java虚拟机可以自适应的在两种方式之间切换。

10.  在类里定义一个对象的引用,而不对其赋值,此引用就会获得一个特殊的值null

11.  类的初始化顺序:父类的静态字段的初始化,静态代码段的初始化,子类静态字段和代码段的初始化,然后是父类和子类的非静态字段和代码段的初始化(内存置二进制0),父类构造函数的初始化,子类构造函数的初始化。

12.  在声明数组时不允许设置大小。而在用new分配数组空间时可以。如:int [] array = new int[20];

13.  可以用private的构造器来限制new一个对象。

14.  类可以是包访问权限(什么都不加)public的访问权限。

-继承

15.  在子类中仍然可以用父类中重载过的方法。

16.  代码的复用。组合:把其他的类的对象嵌入到新的类中,以实现更多的功能。是has-a的实现,如:车子包含轮子。继承:在其他类的基础上增加新的功能。是is-a的实现,如:车子是交通工具。

17.  子类是父类的一种类型。

18.  final字段可以是空的,但是必须在使用之前赋值。可以将实参定义为final

19.  将方法声明为final可以提高效率,因为编译器看到final方法,则谨慎的将该函数转为内联函数。

20.  类在创建对象或是在使用其静态字段方法时加载,静态字段的加载顺序按照代码的书写顺序加载。

-多态

21.  java中,除了staticfinal方法,其他的默认都是后期绑定(运行时绑定)。

22.  Sharp s = new Circle();s.draw();//调用的是Circledraw()函数,因为后期绑定。

23.  基类中的方法如果是private的,则不会发生重载,也不会发生后期绑定。

24.  一个包含抽象方法的类,必须是抽象的类。否则编译器报错。

25.  构造器并不具有多态性,因为他是隐式的static方法。

26.  创建一个对象,子类构造器在构造时会递归的调用父类的构造器,父类初始化其自身字段,然后子类再依次初始化其字段。

27.  如果子类的构造方法中有调用重载方法时,则调用顺序是这样的:在申请空间置二进制0,子类调用重载的方法,调用父类的构造器,初始化字段,依次调用子类的构造器。

28.  清除对象时应该先清除子类的垃圾,然后调用父类的方法清除垃圾。

29.  编写构造器时一条有用的原则:用尽可能简单的方法使对象进入正常状态,如果可以的话,避免调用其他的方法。(或者调用final方法和private,因为他们不能被重载)

30.  运行期类型识别(RTTI)会在转型时进行检查。

-接口和内部类

31.  接口的数据成员被最先初始化。

32.  接口中的数据成员不能是空的final成员。

33.  内部类可以是privateprotect的,而普通类则不可以。

34.  内部类可以在任意的作用域创建内部类,实现了某类接口,并想返回对其的引用;想创建一个类来辅助解决方案,但又不希望这个类是公共的。

35.  在作用域内创建内部类,出了作用域便不可访问。而且只能访问作用域内的成员。

36.  要想创建匿名内部类的构造器,则简单的传递合适的参数给积累的构造器即可。

37.  在匿名内部类中调用外部的对象引用,则这个对象引用必须是final的。

38.  内部类能访问其外围类的所有成员,而不需要任何其他条件。因为普通的内部类隐式的包含了一个他外围类的引用。

39.  嵌套类是声明为static的内部类,它不能访问外围类的非static成员。它没有this

40.  内部类生成的是外围类$内部类.class的文件,如果是匿名内部类,则简单的在$后加数字.class

41.  每个内部类都能独立的继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口)的实现,对于内部类都没有影响。

42.  如果要在一个类中继承多个抽象类(而不是接口),那只能用内部类。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值