java面试补充

JVM

1.java为什么编译与解释共存的语言 。

如图,先编译再解释,JIT的作用和分页存储管理中的缓存差不多 

 

java序列化

1,静态变量能被序列化吗?

静态变量不能被序列化。序列化的目的是存储对象的实例状态,而静态变量是属于类的,而不是具体的实例。

注:

  • 类(Class) 是一个模板或蓝图,定义了对象的属性(字段)和行为(方法)。它是抽象的,不能直接使用。
  • 对象(Object) 是类的一个实例,通过类创建的实际存在的实体。对象是具体的,包含实际的数据。

2.如何让一个类支持序列化?

要使一个类支持序列化,类需要实现 Serializable 接口,该接口没有任何方法,是一个标记接口。

public class MyClass implements Serializable {
    private static final long serialVersionUID = 1L;
    // 类的内容
}
 

3.什么是 serialVersionUID?为什么需要它? 

serialVersionUID 是一个唯一的标识,用来验证序列化过程中发送者和接收者是否加载了相同版本的类。如果类发生了变化而没有更新 serialVersionUID,反序列化时会抛出 InvalidClassException。为确保版本一致性,通常手动定义 serialVersionUID

4.序列化在哪一层 

osi七层口诀:物联网叔会使用

在表示层

tcp/ip四层:应用层,传输层,网络层,网络接口层

在应用层

5.序列化的目的是什么?

序列化的主要目的是将对象的状态保存或传输,使得对象可以被存储(如保存到文件)或在网络上传输(如通过RMI、Socket进行远程通信)。

6.transient 关键字的作用是什么

transient 关键字用于防止某个字段在序列化过程中被序列化。当一个字段被声明为 transient 时,该字段不会被序列化。

java反射

1. 什么是Java反射?

:Java反射是一个API,允许在运行时获取类的结构(如类名、方法、字段、构造函数等),并对这些成员进行操作。通过反射,程序可以在运行时动态加载和操作类,而不需要在编译时知道它们的名称。

2.如何获取类的 Class 对象?

如果我们动态获取到这些信息,我们需要依靠 Class 对象。Class 类对象将一个类的方法、变量等信息告诉运行的程序 

1.使用 Class.forName("className")

2。使用 类名.class

3.使用对象的 getClass() 方法:

3.反射可以破坏Java的封装性吗?

是的,反射可以绕过Java的访问控制修饰符(如 privateprotected)。通过 setAccessible(true),可以访问和修改类的私有字段和方法。这可能会导致程序安全性和稳定性问题,因此应谨慎使用。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值