java面试题(下)

在这里插入图片描述
一、final、finally、finalize的区别?
(1)final关键字的含义是:这是无法改变的,可能使用在数据、方法和类上。在类上不可被继承,在方法上不可重写、覆盖,在属性上必须初始化,对于基本数据类型final使数值恒定不变,对于引用数据类型,引用恒定不变。
注意:带有恒定初始值的final、static基本类型全用大写字母命名,并且字与字之间用下划线隔开。例:

private static final int VALUE_TWO=1;

(2)、finally在异常处理程序之后使用,try-catch语句块之后。无论try语句块是否执行,finally里面的内容都执行,常用来清理资源(把内存之内的资源恢复到初始状态)。
(3)、finalize()方法回收程序不再使用的内存。一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用finalize()方法。此方法不保证垃圾会被立即回收。

二、GC是什么?为什么要有CG?
(1)、是垃圾收集器,用于检测或者回收对象作用范围的一个机制。
(2)、我们也可以手动执行下面方法主动进行垃圾回收,但是不保证垃圾立马回收,因为它是低线程级的。

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。因为值相同则:

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接口。主要代码:

Book book = new Book("111","java");//该类实现了接口

(2)、序列化对象保存到文件中:

  //创建了一对象输出流
  ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("book.dat"));
   
    oos.writeObject(book);//流中写入对象
    oos.close();//关流

(3)、反序列化对象读出来:

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启动垃圾回收机制,自动回收。生命周期长。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐jiankang

欢迎关注java基础笔记公众号

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值