转载请注明出处
第1题:什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
Java虚拟机JVM(java virtual machine)是一个运行字节码的程序。Java写的代码保存为后缀为.java的文件,它会被特定的程序(javac.exe)编译,编译之后称为字节码文件(bytecode,后缀为.class),字节码在CPU上不能直接运行,需要另一个程序读取并运行,这个程序就是JVM。
同一个.java源程序 生成的字节码文件(.class)都是一样的。而对于同一条指令,不同机器上面的机器码是不一样的。比如,读命令在A机器上是001,而B机器上面是010。JVM做的事情就是把字节码文件翻译成当前机器能够正确执行的机器码。
不同机器用它所兼容的JVM,所以实现了所谓的“与平台无关”。
第2题:JDK和JRE的区别是什么?
JRE(Java Runtime Environment):Java运行环境。只包含了Java虚拟机、Java核心类库 和 支持文件。
JDK(Java Development Kit):Java开发工具包 是 完整的Java软件开发包,包含了JRE,编译器(javac.exe) 和 其他的工具(比如:JavaDoc, Java调试器)。
第3题:”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
static表示静态的意思。它可以修饰一个成员变量或者成员方法,这样的话,该变量或方法可以在没有类的实例变量之下通过“类名.变量名”或者“类名.方法名”进行访问。
static方法不能被覆盖。static方法是编译时静态绑定的,而方法覆盖是运行时动态绑定的。
private方法也不能被覆盖。private描述的方法只能在当前类中使用。
第4题:是否可以在static环境中访问非static变量?
否。因为static环境比非static变量更早初始化,所以static环境开始使用的时候,非static变量还没被创建出来,所以不能访问,编译器会报错。
第5题:Java支持的数据类型有哪些?什么是自动拆装箱?
Java支持2种数据类型:
1. 基本数据类型(8种)。byte, short, int, long, float, double, boolean, char
2. 引用类型。 Byte,Short,Integer,Long,Float,Double,Boolean,Character
引用类型是 保存的对象的地址,然后通过地址找到堆中的对象。String等也是引用类型。
自动拆装箱:在特定情况下,例如给某个方法传递参数时,基本数据 和 引用类型能够相互转换(如int-->Integer)
例如:
Integer value = 10;//java5之后可以这样自动装箱。把10这个int类型的值复制为引用类型的Integer对象。
//相当于java5之前的 Integer value = new Integer(10);
int i = value;//这样就是自动拆箱。
第6题:Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
覆盖是 子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。(加上@override可以让编译器验证当前方法是否也存在于父类中,写错方法名,编译器就会报错)
重载是在同一个类里面的方法,这些方法的名字相同,但参数不同,返回类型可以相同也可以不同。每个重载的方法都要有一个独一无二的参数类型列表(根据参数列表来区分的)。
第7题:Java中,什么是构造方法?什么是构造方法重载?什么是复制构造方法?
构造方法:用于新对象创建时构造这个对象的方法(方法名和类名相同)。如果程序员没有提供这个类的构造方法,Java编译器会给这个类创建一个默认的构造方法。
构造方法重载:当前重载的方法是构造方法(也就是和类名相同的方法,不同的构造方法通过参数列表来区分)。
复制构造方法:用一个已经实例化的对象来初始化(new)一个对象。(Java不像C++那样提供默认的复制构造方法)
例如,
public class Time{
private int hour;
private int minute;
private int second;
public Time(){ //构造方法
}
public Time(int h, int m, int s){//构造方法重载
this.hour = h;
this.minute = m;
this.second = s;
}
public Time(Time t){ //复制构造方法
this.hour = t.hour;
this.minute = t.m;
this.second = t.s;
}
}
第8题:Java支持多继承吗?
Java不支持多继承,只有单继承。但可以通过实现多个接口来拓展相应的功能。
第9题:接口和抽象类的区别是什么?
接口 |
抽象类 |
隐含的方法都是抽象的 |
可以同时包含抽象方法和非抽象方法 |
类可以实现多个接口 |
类只能继承一个抽象类 |
声明的变量默认是final的 |
可以包含final的变量 |
成员函数默认是public的 |
成员函数可以是private, protected, 或者public |
类可以不实现抽象类和接口声明的所有方法,但类必须得声明成是抽象的。
接口和抽象类都不能被实例化。
第10题:什么是值传递和引用传递?
值传递是对基本型变量而言的。传递的是变量的副本,改变副本不会改变原变量的值。
引用传递是对 对象型变量而言的。传递的是对象的地址的副本,改变这个副本(地址)的对应的对象(就是原来的对象) 会改变原来对象 的值。
关于java一切都是值传递的理解:引用传递 传递 的值是对象的地址的值 的 副本。