JVM
1.java为什么编译与解释共存的语言 。
如图,先编译再解释,JIT的作用和分页存储管理中的缓存差不多
- 编译型:编译型语言open in new window 会通过编译器open in new window将源代码一次性翻译成可被该平台执行的机器码。一般情况下,编译语言的执行速度比较快,开发效率比较低。常见的编译性语言有 C、C++、Go、Rust 等等。
- 解释型:解释型语言open in new window会通过解释器open in new window一句一句的将代码解释(interpret)为机器代码后再执行。解释型语言开发效率比较快,执行速度比较慢。常见的解释性语言有 Python、JavaScript、PHP 等等。
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的访问控制修饰符(如 private
、protected
)。通过 setAccessible(true)
,可以访问和修改类的私有字段和方法。这可能会导致程序安全性和稳定性问题,因此应谨慎使用。