一、Java平台概述
Java是一种面向对象的语言,有两个特征。一是“一次编译,到处运行”,获取了跨平台的能力。二是垃圾回收机制,JVM自动进行垃圾回收,不需要手动释放。
我们日常接触的JRE就是Java运行环境,包括JVM和Java类库。JDK是Java开发工具集,是JRE的超集,除了JVM和Java类库,还包括一些其他工具。
Java是解释执行,这句话不太准确。通常我们开发的Java代码,通过javac编译成字节码,然后JVM加载字节码转换成可以执行的机器码。但是虚拟机可以利用JIT机制,将部分热点代码直接编译成机器码,是编译执行。
二、Exception和Error有什么区别
Exception和Error都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出或捕获,它是异常处理机制的基本组成类型。
根据不同异常情况的分类,可以分为Exception和Error。Exception是程序正常运行中,可以预料的意外情况,并且应该被捕获,并进行相应处理。Error是指在正常情况下,不大可能出现的情况,绝大部分法Error都会导致程序处于非正常的,不可恢复的状态。不需要捕获。
Exception又可以分为可检查异常(Checked Exception)和不检查异常(Unchecked Exception)。可检查异常在源代码里面必须显示的进行捕获处理,这是编译期检查的一部分。不可检查异常就是所谓的运行期异常,类似NullPointerException、ArrayIndexOutOfBoundsException之类,通常是编码可以避免的逻辑错误,根据需要来判断是否需要捕获。
三、final、finally、finalize的区别
final可以修饰类,方法,变量。final修饰类表示该类是不可继承的,修饰方法表示该方法不能重写,修饰变量表示该变量不可修改。
finally则是Java保证重点代码一定要被执行的一种机制。通常和try-finally,try-catch-finally配合使用。
finalize是基础类java.lang.Object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的收集。
四、String、StringBuffer、StringBuilder有什么区别
String提供了构造和管理字符串的各种基本逻辑,它是不可变的,被声明成final class,所有属性都是final的。由于它的不可变性,类型拼接,裁剪字符串等动作,都会产生新的String对象,相关操作对效率有明显影响。
StringBuffer的出现是为了解决字符串操作产生太对中间对象的问题。我们可以用append或add方法,把字符串添加到已有序列的末尾或者指定位置。StringBuffer本质是一个线程安全的可修改字符序列,它保证了线程安全,但也随之带来了额外的开销。
StringBuilder在能力上和StringBuffer相同,但它去掉了线程安全的部分,有效减少了开销,是绝大部分情况下进行字符串拼接的首选。
五、int和Integer的区别
int是我们常说的整形数字,是Java的8个原始数据类型之一(boolean、byte、short、long、double、int、char、float)。Java语言虽然号称一起都是对象,但原始数据类型是例外。
Integer是int对应的包装类,它有一个int类型的字段存储数据,并且提供了基本的操作,包括数学运算,int和字符串之间的转换等。在Java5中,引入了自动装箱和自动柴箱功能。Java可以根据上下文,自动进行切换,极大地简化了相关编程。