1.Java Error和Exception区别
Error和Exception都继承自Throwable;
二者不同之处:
Exception:
1.可以是可被控制(checked)或者不可控制(unchecked);
2.表示一个由程序员导致的错误;
3.应该在应用程序级被处理;
Error:
1.总是不可控制的(unchecked);
2.经常用来表示系统错误或者底层资源错误;
3.如果可能的话,应该在系统级被捕捉;
2.throw和throws区别
throws是声明在方法上的,而throw是在类上声明的
3.栈和堆的区别(通过栈的引用变量来调用堆中的对象或数组,栈是存放堆中的地址值)
栈内存
在函数中定义的基本类型的变量和对象的引用变量都是在函数的栈内存中分配。
当在一段代码块中声明了一个变量时,java就会在栈内存中为这个变量分配内存空间,当超过变量的作用域之后,java也会自动释放为该变量分配的空间,而这个回收的空间可以即刻用作他用。
堆内存
堆内存用于存放由new创建的对象和数组。
在堆内存中分配的内存空间,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,变量的值就等于数组或对象在堆内存中的首地址,而这个栈中的特殊变量,也就成为数组或对象的引用变量。以后可以在程序中使用栈内存中的引用变量访问堆内存中的数组或对象了。引用变量相当于是为数组或对象起的一个别名,或者是代号。
数组和对象在没有引用变量指向它的时候,才变成垃圾,不能被继续使用,但是仍然会占用堆内存空间,而后在一个不确定的时间内,由java虚拟机自动垃圾回收器回收,这也是java程序为什么会占用很大内存的原因