JAVA基础

工作了小半年了,技术上感觉没有什么提升,以前学的也都遗忘了好多,以后跳槽都没有底气...所以这次复习一下.

谈谈你对Java平台的理解?"Java 是解释执行",这句话正确吗?

Java 本身是一种面向对象的语言,最显著的特性:跨平台特性和垃圾收集.并不是说Java语言可以跨平台,而是不同的平台都有可以运行Java语言的环境(JRE)

"Java 是解释执行"这个说法不太准确。编译执行类似英文一次性全文翻译;解释执行类似同声传译. 通常来讲,我们写的源代码(.java)会由编译器编译成字节码文件(.class).运行的时候,JVM解释器将字节码转换成机器码.
但是常见的JVM比如Hotspot JVM提供了JIT(Just-In-TIme)编译器,也叫动态编译器,JIT能在运行时将热点代码编译成机器码,这部分热点代码就是编译执行而不是解释执行了(混合模式).

请对比 Exception 和 Error,另外,运行时异常与一般异常有什么区别?

都继承了Throwable类,异常处理的基类.Exception是程序正常运行中可以预料到的意外情况,可能并且应该被捕获.Error是正常情况下,不太可能出现的情况,大部分Error会导致程序处于非正常的不可恢复的状态,此时不便于也不需要捕捉.

Exception分为可检查异常和不检查异常,可检查异常是源代码必须显式捕获处理的异常,编译期会检查,不捕捉就没法通过编译.不检查异常也叫运行时异常类似NullPointerException,ArrayIndexOutOfBoundsException,通常是可以编码避免的逻辑错误.编译期间不会强制要求处理

try-catch 代码段会产生额外的性能开销,或者换个角度说,它往往会影响 JVM 对代码进行优化,所以建议仅捕获有必要的代码段,尽量不要一个大的 try 包住整段的代码.业务流程使用if/else

Throw和Throws注意位置
JAVA基础_第1张图片

try-with-resources 和 multiple catch

try (
    BufferedReader br = new BufferedReader(…);
    BufferedWriter writer = new BufferedWriter(…)
) {// Try-with-resources
    // do something
}catch ( IOException | XEception e) {// Multiple catch
   // Handle it
} 

throw early原则
如果filename是null就能提前抛出了

public void readPreferences(String filename) {
    Objects.requireNonNull(filename);
    //...perform other operations... 
    InputStream in = new FileInputStream(filename);
     //...read the preferences file...
}

NoClassDefFoundError和ClassNotFoundException
NoClassDefFoundError是一个错误(Error),而ClassNotFoundException是一个异常(Exception).ClassNotFoundException:反射里的Class.forName找不到类.NoClassDefFoundError:类在编译的时候是存在的,运行的时候却找不到

你可能感兴趣的