Java基础

yishuai
0
2025-06-22

1. 谈谈对Java平台的理解

Java是一种面向对象的语言,最显著的特征有两个,

一个是书写一次,到处运行(Write/Compile once,run anywhere)通过这种方式,非常容易获得跨平台的能力;

PS:Java跨平台的特性,不是指由JVM编译字节码后,可以直接在各个平台运行,而是指在各个平台上安装好对应的JDK环境以后,可以在各个环境的JVM中运行。

另一个则是垃圾回收器(GC, Garbage Collector),通过垃圾回收器,程序员可以专注于代码的开发,而不用自己操心内存的分配与回收。

拓展:

类加载机制

常见的垃圾收集器(SerialGC、ParallelGC、CMS、G1)

垃圾收集器的原理

2. 什么是Java的解释执行?

Java语言有JVM虚拟机,首先是由Javac指令,把Java编译成字节码,和C++的编译执行不一样,C++是把C文件直接编译成机器码,而Java是把Java文件编译成字节码,然后通过JVM(Java虚拟机)将字节码解释成机器码来运行,在.class文件中,存放的时字节码,Java通过字节码和JVM这种跨平台的抽象,屏蔽了操作系统和硬件直接的差异,这也是一次编译,到处运行的基础

当然,也有特殊点,大部分的JDK(Oracle的Hotspot)都会具备JIT(just in time,动态编译器)来把热点字节码编译成机器码(编译执行),然后再运行,这样子可以大大提高热点代码的执行效率。所以Java语言算是混合执行(解释执行 + 编译执行)

拓展:

C1:client模式,适用于启动速度敏感的应用

C2:server模式,为长时间运行的服务器应用设计的,采用分层编译

3. Exception与Error的区别

它们都是继承于Throwable类,只有Throwable类型的实例,才能被throw和catch

  1. Exception通常是程序正常运行过程中,预料之中的情况,它可以并且应该被捕获,然后进行对应的处理。Exception又分为检查时异常和运行时异常,

    1. 检查时异常:必须在程序中显式的捕获或抛出的异常,这是编译时检查的一部分。
    2. 运行时异常:运行过程中出现的异常,这种异常通常是可以编码避免的逻辑错误,具体要根据业务需求常见,来判定要不要捕获或抛出。
  2. Error是指在正常情况下不大可能出现的情况,大部分的Error会导致程序异常,并处于不可恢复的状态。

4. final、finally、finalize有什么不同

  1. final是用来修饰类、方法、变量的一个关键字,作用在类上时,意味着类不可被继承,作用在方法上时,意味着方法不可被重写,作用在变量上时,意味着变量的引用不可变。

  2. finally是用来和异常捕获语句通用的,可以用try-finally,try-catch-finally,被finally包裹的代码块是一定会执行的,除了system.exit(1)的情况,通常用来释放资源、解除锁等操作。

  3. finalize是object的一个方法,它的设计目的是保证对象被垃圾回收前,完成特定资源的回收。目前已经不推荐使用,从JDK9开始,被标记为deprecated

动物装饰