单选 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 面向对象的特性。即一切都是对象。