一些Java易错题目

1.以下程序的输出结果为()

class Base {
    public Base(String s) {
        System.out.print("B");
    }
}

public class Derived extends Base {
    public Derived(String s) {
        System.out.print("D");
    }

    public static void main(String[] args) {
        new Derived("C");
    }
}

选项:
A:BD
B:DB
C:C
D:编译错误

正确答案:D
解析:子类没有调用父类的构造方法


2.以下程序的输出结果为()

class Base {
    public void method() {
        System.out.println("Base");
    }
}

class Son extends Base {
    public void method() {
        System.out.println("Son");
    }

    public void methodB() {
        System.out.println("SonB");
    }
}

public class Test {
    public static void main(String[] args) {
        Base base = new Son();
        base.method();
        base.methodB();
    }
}

选项:
A:Base SonB
B:Son SonB
C:Base Son SonB
D:编译不通过

正确答案:D
解析:<多态性>父类引用不能调用子类方法


3.以下说法错误的是()

A: 虚拟机中没有泛型,只有普通类和普通方法
B: 所有泛型类的类型参数在编译时都会被擦除
C: 创建泛型对象时请指明类型,让编译器尽早的做参数检查
D: 泛型的类型擦除机制意味着不能在运行时动态获取List<T>中T的实际类型

正确答案:D
解析:泛型停留在编写阶段就是为了让编译器提前检查。编译期类型擦除,运行时根本不会有List<T>的这个T,运行时其实就只是个List,没有后面的<T>了。


4.Java接口的修饰符可以为()

A: private
B: protected
C: final
D: abstract

正确答案:D


5.下面有关List接口、Set接口和Map接口的描述,错误的是()

A: 他们都继承自Collection接口
B: List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置
C: Set是一种不包含重复的元素的Collection
D: Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value

正确答案:A
解析:List接口和Set接口继承自Collection接口,Map接口与Collection接口是并列关系。
在这里插入图片描述


6.子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是()

A: 父类B静态代码块->父类B构造函数->子类A静态代码块->父类B非静态代码块->子类A构造函数->子类A非静态代码块
B: 父类B静态代码块->父类B构造函数->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
C: 父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
D: 父类B构造函数->父类B静态代码块->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块

正确答案:C
解析:

  1. 执行父类的静态成员变量定义与静态初始化块,执行子类的静态成员变量定义与静态初始化块
  2. 执行父类的非静态成员变量定义与动态初始化块,执行父类构造方法
  3. 执行子类的非静态成员变量定义与动态初始化块,执行子类构造方法
发布了16 篇原创文章 · 获赞 2 · 访问量 582

猜你喜欢

转载自blog.csdn.net/ilovestudy_/article/details/102557540