Java面试知识点总结。
1.JVM、JRE和JDK之间的关系
- JVM(Java Virtual Machine)是Java虚拟机,Java程序需要运行在JVM上,不同的平台可以安装对应的JVM,因此Java语言可以实现跨平台。所谓Java的跨平台性,就是指Java程序一次编译后,可以在不同的系统平台上运行。(Java实现跨平台的原理)
- JRE(Java Runtime Environment)是支持(编译后的)Java程序运行的标准环境,包括JVM和Java的核心类库,主要是java.lang包,包含String、System、Thread等Java核心类。
- JDK(Java Development Kit)是支持Java程序开发的最小环境,包括JRE和Java开发工具,比如编译工具javac.exe、打包工具jar.exe等。
2.final、finally和finalize的区别
- final关键字可以修饰类、属性和方法。修饰类表示该类不能被继承;修饰方法表示该方法不能被重写;修饰变量表示该变量是一个常量,不能被重新赋值。
- finally用于Java异常处理机制,一般和try…catch…一同使用,不论try代码块中是否出现异常,finally代码块都会被执行。一般在finally代码块中执行一些资源回收的操作,比如关闭打开的文件,删除临时文件等。
- finalize()是Object类的一个方法,Object类是所有类的父类。当某个对象被GC(通过可达性分析算法)判定为可回收时,GC会调用对象的finalize()方法(最后一次自救的机会)。如果对象的finalize()方法被覆写了,并且在覆写后的方法中,为该对象重新建立从GC Roots可达的引用,那么可以实现该对象的自我救赎。但是finalize()具有不确定性,只保证方法会调用,不保证任务能执行完,比如一个对象手脚不够利索,磨磨唧唧,还在方法执行的过程中,就被杀死回收了。因此这个方法并没有什么鸟用。