Java基础面试题库(二)
# 11、以下程序输出()
public static void main(String[] args) {
int num = 2;
switch (num) {
case 1:
++num;
case 2:
++num;
case 3:
++num;
default:
++num;
break;
}
System.out.println(num);
}
}
5
到break才跳出
# 12、以下Java程序运行的结果是:
public class Tester{
public static void main(String[] args){
Integer var1=new Integer(1);
Integer var2=var1;
doSomething(var2);
System.out.print(var1.intValue());
System.out.print(var1==var2);
}
public static void doSomething(Integer integer){
integer=new Integer(2);
}
}
1true
var1==var2
会进行拆箱,比较的是值。
# 13、设有下面两个赋值语句:
a = Integer.parseInt("1024");
b = Integer.valueOf("1024").intValue();
下述说法正确的是()
A a是整数类型变量,b是整数类对象。
B a是整数类对象,b是整数类型变量。
C a和b都是整数类对象并且它们的值相等。
D a和b都是整数类型变量并且它们的值相等。
D
intValue()是把Integer对象类型变成int的基础数据类型; parseInt()是把String 变成int的基础数据类型; Valueof()是把String 转化成Integer对象类型;(现在JDK版本支持自动装箱拆箱了。) 本题:parseInt得到的是基础数据类型int,valueof得到的是装箱数据类型Integer,然后再通过valueInt转换成int,所以选择D
# 14、Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( )
A Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
B 通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
C 通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
D Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
E Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
F Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率
正确答案: A D F
A Class类在java.lang包
B 动态代理技术可以动态创建一个代理对象,反射不行
C 反射访问私有成员时,Field调用setAccessible可解除访问符限制
D CGLIB实现了字节码修改,反射不行
E 反射会动态创建额外的对象,比如每个成员方法只有一个Method对象作为root,他不直接暴露给用户。调用时会返回一个Method的包装类
F 反射带来的效率问题主要是动态解析类,JVM没法对反射代码优化。
# 15、根据以下接口和类的定义,要使代码没有语法错误,则类Hero中应该定义方法( )。
interface Action{
void fly();
}
class Hero implements Action{
//……
}
A private void fly(){}
B void fly(){}
C protected void fly(){}
D public void fly(){}
D
接口方法默认是public abstract的,且实现该接口的类中对应的方法的可见性不能小于接口方法的可见性,因此也只能是public的。
# 16、下面有关java object默认的基本方法,说法错误的是?
A equals(Object obj) 指示某个其他对象是否与此对象“相等”
B copy() 创建并返回此对象的一个副本
C wait() 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法
D toString() 返回该对象的字符串表示
B
是clone方法 不是copy方法。
# 17、 以下关于final关键字说法错误的是
A final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性
B final修饰的类肯定不能被继承
C final修饰的方法不能被重载
D final修饰的变量不允许被再次赋值
A C
final修饰类、方法、属性!不能修饰抽象类,因为抽象类一般都是需要被继承的,final修饰后就不能继承了。final修饰的方法不能被重写而不是重载! final修饰属性,此属性就是一个常量,不能被再次赋值!
# 18、 往OuterClass类的代码段中插入内部类声明, 哪一个是错误的:
public class OuterClass{
private float f=1.0f;
//插入代码到这里
}
A
class InnerClass{
public static float func(){return f;}
}
B
abstract class InnerClass{
public abstract float func(){}
}
C
static class InnerClass{
protected static float func(){return f;}
}
D
public class InnerClass{
static float func(){return f;}
}
ABCD
1.静态内部类才可以声明静态方法 A、C错
2.静态方法不可以使用非静态变量 D错
3.抽象方法不可以有函数体 B错
# 19、Java1.8版本之前的前提,Java特性中,abstract class和interface有什么区别()
A 抽象类可以有构造方法,接口中不能有构造方法
B 抽象类中可以有普通成员变量,接口中没有普通成员变量
C 抽象类中不可以包含静态方法,接口中可以包含静态方法
D 一个类可以实现多个接口,但只能继承一个抽象类。
A B D
# 20、下列哪些针对代码运行结果是?
class Vehicle
{
private final void run()
{
System. out. println("Vehicle");
}
}
class Car extends Vehicle
{
public static void main (String[] args)
{
new Car(). run();
}
private final void run()
{
System. out. println ("Car");
}
}
Car
父类方法有private修饰,所以对子类不可见,子类不能覆盖。所以子类方法和父类是两个方法。
如果父类方法将private改为public 会报错,因为父类final不允许继承。