1.下列哪一个是正确的()。
A.Java程序经编译后会产生machine code B.Java程序经编译后会产生DLL
C.Java程序经编译后会产生byte code D.以上都不正确
解析:Java程序执行机制是:
源程序(*.java文件)-->Java编译器-->字节码(*.class文件) -->JVM-->操作系统。
所以选C,值得注意的是运行JVM字节码的工作是由解释器来完成的,整个运行过程是:代码的装入、校验和执行。
2.以下哪个关键字可以用来为对象加互斥锁?( )
A.transient B.static C.serialize D.synchronized
解析:synchronized主要用于标识临界区使之成为一种逻辑上的原子操作,以达到线程间的互斥,
所以选D。
3.下面有关方法覆盖说法正确的是:( )
A.方法覆盖要求覆盖和被覆盖的方法不能有相同的名字,参数列以及返回值
B.方法覆盖要求覆盖和被覆盖的方法必须具有相同的访问权限
C.被覆盖的方法不能比覆盖的方法抛出更多的异常
D.覆盖的方法一定不能是private的
解析:子类重写的方法不能比父类中被重写的方法拥有更严格的访问权限。
所以选D。
4. throws 关键字和 throw 关键字有什么区别和联系?
答案:throw用来在方法体内抛出异常,而throws用来在方法声明处声明异常。这两个关键字有着一定的联系。如果一个方法中使用了throw关键字抛出了异常,那么要么立即用try/catch语句进行捕获, 要么就是用throws进行声明,否则将出现编译错误。然而, 并不是 只有使用了throw关键字之后才能使用throws关键字,语法上来说,任何一个方法都可以直接使用throws关键字,抽象方法也可以使用。
5.什么是多态?如何实现多态?
答案:多态性(Polymorphism)是指在基类中定义的属性或方法被派生类继承后,可以具有不同的数据类型,或表现出不同的行为,从而使得同一个属性或方法在基类及其各个派生类中具有不同的语义。Java的多态性体现在两个方面:(1) 方法重载实现的静态多态性,又 称为编译时多态;(2) 方法覆盖/重写实现的动态多态性,又称为运行时多态。
6.静态变量和实例变量的区别?
答案:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。