Java编程思想学习笔记——流程控制,初始化与清除

1. 尽管Java中仍将goto作为保留字,但其不可在Java中使用。

2. Java中的break,continue语句,可以后面加标签一起使用以使break,continue在多重循环中起作用,break中转到标签处但不再重新迭代。Java中标签只能用于嵌套循环的控制。

3. switch语句只支持int与char类型,但Java SE5中的新特性enum减弱了这种限制,因为enum可与switch一起使用。

4. 在执行对象的方法时,如a.sayHello()。编译器实际上将a的引用传递给了sayHello()方法,在方法定义时,可通过this指针取得a的引用。可以在一个构造函数中,调用另一个构造函数,用this指针。但调用时一定要放在构造函数起始位置,并且只能调用一次其它构造函数。

5. Java中的finalize()方法的工作原理是这样的:一旦垃圾回收器准备好释放对象点用的存储空间时,它将首先调用其finalize()方法,并在下次垃圾回收动作发生时才真正回收空间。finalize()并不总会执行,因为GC可能不会执行,因此不能将空间释放之类的代码放于其中。Java中需要手动进行空间释放等动作只有一种情况,那就是执行了本地方法(由C/C++所编写)的情况下。finalize()第二种用途,就是对对象终结条件的判断。即对象若被GC收集,其各个成员变量值是否满足某种条件。

6. Java垃圾收集器实现算法有:引用计数、标记清扫、标记复制、标记整理、分代收集(代间引用)、增量式收集、火车算法等。

7. 每个Java程序运行,都有一个JVM实例。

8. Java中也有类似内存泄漏的问题,就是用数组来模拟容器时,下标++和--运算时,并不会释放空间,要手动置为null。

9. 由GC的工作原理可有一些好的编程建议:(1)将不用的对象引用置为null;(2)少用finalize();(3)将经常用的图片等大的内容用softReference引用,可在内存有限时,做到伸缩性;(4)复杂的数据结构对GC来说负担更大;(5)如程序有一定等等时间可手动执行System.gc()。

10. Java中允许成员变量定义时赋初值,C++中不允许。Java中的成员变量自动初始化一定会执行(给int赋0等行为),而且在构造函数执行之前执行,顺序取决于变量定义的先后顺序,即使变量被散布于方法定义之间,它们仍会在所有构造函数执行之前执行所有自动初始化。

11. 对象创建过程,假设有一个名为Dog的类:

(1)构造函数实际为静态方法,因此,当首次创建类的实例时,或Dog类的静态方法或属性被首次访问时,Java解释器将查找Dog.class文件,然后将它载入,有关静态初始化的所有动作都会在此时执行,故静态初始化只执行一次。

(2)当new Dog()时,首先在堆上为Dog分配足够的内存,并对其中的变量自动初始化。

(3)执行所有出现于属性定义处的初始化动作。

(4)执行构造函数。

12. 静态类成员属性/对象的初始化,在没有指定初始值时,基本类型一个基准值,引用置为null,final必须指定初始值。

13. 类中由static关键字所包含的一段代码,也将于class文件载入时执行一次。而如果类中一段未加static的代码块,则会在每次执行构造函数之前执行一次。

14. 编译器不又允许指定数组的大小,要么声明的时候初始化,要么用new到运行时指定大小。int a[]=new int[20];//左边没有数组大小。

15. 数组中的元素,也会在没有初始化时,进行自动初始化。

16. Java中支持可变参数列表。

17. Java内存设置分配:

(1)栈区:用来保持临时数据,指向堆区的引用,函数返回时的入口等。

(2)堆区:用来保持对象的数据相关部分,由栈中的引用指向,包括字符串常量区。

(3)方法区:用来保存JVM装载进来的类及方法,当堆中的对象调用某方法时,到这里找对应类的方法代码。每个线程都有一个堆栈,有自己的PC寄存器,但所有线程共享堆区与方法区。

18. Java中的equals方法默认比较两个引用是否指向同一对象,hashCode()默认返回对象的内存地址,因两个相等的对象应有相同的hashCode,故重写了equals()必须重写hashCode(),反之不必。

19. Java的多态性由Class对象保存的类的信息来实现,每个对象的getClass()方法都可以得到其Class对象。

20. 自己实现clone方法时,需要进行深度复制,即对每一个非基本类型的成员,访问其clone()方法来为新对象赋值,如:

Stack stack=(Stack)super.clone();

stack.element=stack.element.clone();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值