一、final、finally、finalize的区别?
(1)final关键字的含义是:这是无法改变的,可能使用在数据、方法和类上。在类上不可被继承,在方法上不可重写、覆盖,在属性上必须初始化,对于基本数据类型final使数值恒定不变,对于引用数据类型,引用恒定不变。 注意:带有恒定初始值的final、static基本类型全用大写字母命名,并且字与字之间用下划线隔开。例:
代码语言:javascript复制private static final int VALUE_TWO=1;
(2)、finally在异常处理程序之后使用,try-catch语句块之后。无论try语句块是否执行,finally里面的内容都执行,常用来清理资源(把内存之内的资源恢复到初始状态)。 (3)、finalize()方法回收程序不再使用的内存。一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用finalize()方法。此方法不保证垃圾会被立即回收。
二、GC是什么?为什么要有CG?
(1)、是垃圾收集器,用于检测或者回收对象作用范围的一个机制。
(2)、我们也可以手动执行下面方法主动进行垃圾回收,但是不保证垃圾立马回收,因为它是低线程级的。
代码语言:javascript复制System.gc()
(3)、好处:有了他,工程师不用考虑内存回收,避免了错误的内存回收导致的程序或者系统不稳定。
三、jsp有哪些内置对象,分别表示什么含义?
1、request:代表了客户端的请求信息。一次请求中有效。 2、response:代表了对客户端的响应。 3、session:完成会话期管理。客户打开浏览器到关闭浏览器期间有效。 4、application:保存在服务器中,在整个应用中有效。比session生命周期长。 5、out:用于在web浏览器中输出对象。 6、pageContext:获取jsp页面的所有对象及名字空间的访问。 7、config:主要作用是获得服务器的配置信息。Servlet初始化时,容器把某些信息通过config传递给Servlet。 8、page对象:代表jsp本身,只有在jsp当前页保存属性,跳转无效。 9、Exception:显示异常信息,只在包含isErrorPage="true"的页面中才可以被使用,一般页面无法编译。
四、两个对象的值相同,却有不同的HashCode,对不对?
答:不对 (1)两个对象的值相同,有相同的HashCode。因为值相同则:
代码语言:javascript复制x.equals(y) // true
equal底层比较“==”。对象的hashcode相同,“==”才返回true;
public boolean equals(Object obj) {
return (this == obj);
}
(2)两个对象的HsahCode相同,对象不一定相同。 hashCode是比较地址是否相等,java中的声明变量都是引用,不同的引用可能指向同一个地址。
五、什么是java序列化?如何实现java序列化?
序列化是一种用来处理对象流的机制,将那些实现了Serializable接口的对象转换成字节序列,并能够在以后将这个字节序列完全恢复为原来的对象。 1、序列化:把java对象转换为字节序列的过程。(字节流) 2、反序列化:把字节序列恢复为java对象的过程。 3、实现序列化: (1)必须对象实现Serializable接口。主要代码:
代码语言:javascript复制Book book = new Book("111","java");//该类实现了接口
(2)、序列化对象保存到文件中:
代码语言:javascript复制 //创建了一对象输出流
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("book.dat"));
oos.writeObject(book);//流中写入对象
oos.close();//关流
(3)、反序列化对象读出来:
代码语言:javascript复制 Book book=null;
//创建对象输入流
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("book.dat"));
//读入对象并强制转型为Book类
book=(Book)ois.readObject();
//关流
ois.close();
注:对序列化的文件中敏感信息,我们可以在该属性上声明transient.
六、heap和stack有什么区别?
I、栈的特点:
1、stack存储局部变量(定义在函数中的,函数中的参数上的,方法里的,for循环内部的变量),基本数据类型、临时变量。 2、对象的引用在函数的栈内存中分配 3、栈内存中的数据,没有初始默认值,需要手动设置。 4、栈内存的数据一执行完毕,立即释放,节约内存空间。生命周期短。
II、堆的特点:
1、存放new的对象和数组,每一个new出来的都有地址。 2、所有的数据都有初始默认值。 3、当实体不再被指向时,虚拟机的内存不足时,JVM启动垃圾回收机制,自动回收。生命周期长。
七、总结
以上就是就是java面试题相关所有内容,希望对大家有帮助,可以参考一下