java 错题集之java基础测试

  • 以下错题来源于阿里云java基础测试。
单选 3.下面哪个不是Java内建的Annotation?

A. @Override

B. @Deprecated

C. @SuppressWarning

D. @FunctionalInterface

// 该题地方答案是C,正确的忽略警告的注解是@SuppressWarnings
// 考察基础:对于java常见的基本注解的认识。
// A 注解用于覆写的标识,防止覆写出错。
// B 用于标识该方法或接口已经过时了,请使用最新的方法接口。
// D 函数式功能接口描述,jdk1.8新添加的。用于描述该接口有且仅有一个抽象方法。
  • 父类与子类
  • 9.编译和运行下面代码可能会发生什么?
                 class Base {
                     private void amethod(int iBase) {
                         System.out.println("Base.amethod");
                     }
                 }    
                 class Over extends Base {
                     public static void main(String args[]) {
                         Over o = new Over();
                         int iBase = 0 ;
                          o.amethod(iBase) ;
                     }
                     public void amethod(int iOver) {
                         System.out.println("Over.amethod");
                     }
                 }
    
    A. Compile time error complaining that Base.amethod is private
    
    B. Runntime error complaining that Base.amethod is private
    
    C. Output of Base amethod
    
    D. Output of Over.amethod
    
    //答案D ,解析 此题中父类与子类拥有共同签名的方法,却有不同的权限修饰符。
    
    // 由于父类的私有方法对于子类不可见,所以方法重名是正确的。但是在实际编码中这种应该是要避免的,
    
    //以防止不必要的错误,和影响代码的可读性。
    
    
    

     

  • 静态变量,成员变量,常量赋值初始化问题
  • 13.编译下列代码可能会输出什么?
                 class Test {
                     static int i ;
                     public static void main(String args[]) {
                         System.out.println(i);
                 }
                 }
    
    A. Error Variable i may not have been initialized
    
    B. null
    
    C. 1
    
    D. 0
    
    
    // 答案  D    ,变量没有被赋值时,初始化时会赋予对应类型的默认值。基本类型 int 0  float 0.0F double 0.0D  byte  0   short 0  boolean false   char '' String   null   引用变量为null
    
    // 局部变量的使用需要给予初始化值,成员变量会在构造对象时根据成员变量类型给与默认值。
    
    // 常量必须给予值。
    
    // 静态变量 可以不给值,会使用默认值。

     

  • 静态变量
  • 14.现在有如下一段代码
                 public class Test { 
                        public int aMethod() {
                               static int i=0;
                               i++;
                               return i;
                        }
                        public static void main(String args[]) {
                               Test test = new Test();
                               test.aMethod();
                               int j = test.aMethod();
                               System.out.println(j);
                        }
                 }
                 将产生哪种结果?
    
    A. Compilation will fail
    
    B. Compilation will succeed and the program will print“0”
    
    C. Compilation will succeed and the program will print“1”
    
    D. Compilation will succeed and the program will print“2”
    
      //  答案是A   编译出错。不存在局部静态变量的概念。静态表明此变量跟随类存在,放在方法区。故static  不能修饰方法内不的变量,方法内部的属于局部变量,线程私有,存在于线程的虚拟机栈中。

     

  • 泛型
  • 20.下面关于泛型的描述中错误的一项是?
    
    A. “? extends 类”表示设置泛型上限
    
    B. “? super 类”表示设置泛型下限
    
    C. 利用“?”通配符可以接收全部的泛型类型实例,但却不可修改泛型属性内容
    
    D. 如果类在定义时使用了泛型,则在实例化类对象时需要设置相应的泛型类型,否则程序将无法编译通过
    
    
    //答案 D    java 泛型的实现是采用编译时的类型擦除实现的。如果构造对象时没有设置泛型,则使用Object 代替泛型。比如常见的集合类 ArrayList<?>  如果构造集合时,未指定泛型类型,则表明该集合可以存在任何对象类型。即Object 及其子类。Object是java里的顶级父类。即java里的所有类都继承Object.
    
    
    // 这里也体现了一种设计,公共逻辑的抽象。抽象出现实世界所有一切物品的共性,由此出发来构建了java 面向对象的特性。即一切都是对象。

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章