工作了小半年了,技术上感觉没有什么提升,以前学的也都遗忘了好多,以后跳槽都没有底气...所以这次复习一下.
谈谈你对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注意位置
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:类在编译的时候是存在的,运行的时候却找不到
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。