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中,除了static和final方法,其他的默认都是后期绑定(运行时绑定)。
22. Sharp s = new Circle();s.draw();//调用的是Circle的draw()函数,因为后期绑定。
23. 基类中的方法如果是private的,则不会发生重载,也不会发生后期绑定。
24. 一个包含抽象方法的类,必须是抽象的类。否则编译器报错。
25. 构造器并不具有多态性,因为他是隐式的static方法。
26. 创建一个对象,子类构造器在构造时会递归的调用父类的构造器,父类初始化其自身字段,然后子类再依次初始化其字段。
27. 如果子类的构造方法中有调用重载方法时,则调用顺序是这样的:在申请空间置二进制0,子类调用重载的方法,调用父类的构造器,初始化字段,依次调用子类的构造器。
28. 清除对象时应该先清除子类的垃圾,然后调用父类的方法清除垃圾。
29. 编写构造器时一条有用的原则:用尽可能简单的方法使对象进入正常状态,如果可以的话,避免调用其他的方法。(或者调用final方法和private,因为他们不能被重载)
30. 运行期类型识别(RTTI)会在转型时进行检查。
-接口和内部类
31. 接口的数据成员被最先初始化。
32. 接口中的数据成员不能是空的final成员。
33. 内部类可以是private和protect的,而普通类则不可以。
34. 内部类可以在任意的作用域创建内部类,实现了某类接口,并想返回对其的引用;想创建一个类来辅助解决方案,但又不希望这个类是公共的。
35. 在作用域内创建内部类,出了作用域便不可访问。而且只能访问作用域内的成员。
36. 要想创建匿名内部类的构造器,则简单的传递合适的参数给积累的构造器即可。
37. 在匿名内部类中调用外部的对象引用,则这个对象引用必须是final的。
38. 内部类能访问其外围类的所有成员,而不需要任何其他条件。因为普通的内部类隐式的包含了一个他外围类的引用。
39. 嵌套类是声明为static的内部类,它不能访问外围类的非static成员。它没有this。
40. 内部类生成的是外围类$内部类.class的文件,如果是匿名内部类,则简单的在$后加数字.class
41. 每个内部类都能独立的继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口)的实现,对于内部类都没有影响。
42. 如果要在一个类中继承多个抽象类(而不是接口),那只能用内部类。
本文深入探讨Java中的构造器、方法重载、多态等关键概念,解析类与接口的初始化顺序,以及如何正确使用final和this关键字。同时,介绍了垃圾回收机制的不同策略,并对比了Java与C++在内存管理上的差异。
1906

被折叠的 条评论
为什么被折叠?



