面试题
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件。
Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
2.“static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
static关键字表示静态的意思,用于修饰成员变量和成员函数。表示可以在没有类的实例的情况下,用类名.变量名或者类名.函数名,进行访问
都不能
覆盖,也就是我们常说的重写,是子类继承父类,且子类中的方法和父类中的方法,方法名相同,参数个数和类型相同,返回值相同。
private修饰的方法,不能被继承,所以也不存在重写(覆盖)
static修饰的方法,是静态方法,在编译时就和类名就行了绑定。而重写发生在运行时,动态绑定的。何况static方法,跟类的实例都不相关,所以概念上也适用。
3.Java支持的数据类型有哪些?什么是自动拆装箱?
基本数据类型:
byte(1字节),short(2字节),int(4字节),long(8字节),char(2字节),boolean(不确定,取值是true/false),float(4字节),double(8字节)
引用数据类型:
包括数组,集合,字符串,接口以及类等
自动装箱/自动拆箱
就是指基本数据类型可以和其对应包装类之间自动转换
4.接口和抽象类的区别是什么?
(1)抽象类中可以有一个或多个抽象方法,而接口中的方法必须都是抽象方法
(2)接口中定义方法和成员变量和抽象类中定义方法和成员变量
(3)接口中成员变量默认被修饰为public static final常量
(4)接口最大的一个特点就是可以实现多继承,而抽象类智能继承一个(应该说java中只要是类就只能单继承)
(5)抽象类和方法必须使用abstract关键声明为抽象,而接口中的方法默认被修饰为public abstract类型(默认为公开抽象的方法)
5.创建线程有几种不同的方式?你喜欢哪一种?为什么?
有四种
1、继承Thread类
2、实现Runnable接口
3、应用程序可以使用Executor框架来创建线程池
4、实现Callable接口
我更喜欢实现Runnable接口,因为这样不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承,而Java只能单继承,所以只能实现接口。同时线程池的效率也非常高,很容易实现和使用。