1. 对于数组和对象类型,我们介绍过,它们都有两块内存,一块存放实际的内容,一块存放实际内容的地址,实际的内容一般不是分配在栈上的,而是分配在堆上的,但存放地址的空间是分配在栈上。
2. 对于数组arr,在栈中存放的是实际内容的地址,堆中存放的是实际内容。当栈空间没有变量指向堆里内容的时候,java系统会自动进行垃圾回收,从而释放这个空间。
异常下:
异常处理机制将根据抛出的异常类型找第一个匹配的catch块,找到后,执行catch快内的代码,其他catch块就不执行了,如果没有找到,会继续到上层方法中查找,需要注意的是,抛出的异常类型是catch中声明异常的子类也算匹配。
finally 内的代码不管有无异常发生,都会执行,具体来说:
1. 如果没有异常发生,在try 内的代码执行结束后执行。
2. 如果有异常发生,且被catch捕获,在catch 内的代码执行结束后执行。
3. 如果有异常但没被捕获,则在异常抛给上层之前执行。
4. 如果finally 中有return,则会忽略try{}catch中的异常,直接返回值,如果finally中有异常抛出,则原异常就会被覆盖。
RuntimeException业界认为是程序处理时的逻辑错误,我们应尽可能避免程序出现这种错误,checkException是在编译时必须声明并处理。
真正出现异常的时候应该抛出异常,而不是返回特殊值。