@[TOC][第三周测验]
填空题
- 类的基类是什么类?
- Object是所有类的超类
- static修饰的变量特点
- 全局共享,内存中唯一
- static修饰的方法特点
- 通过类名可以直接调用方法,静态方法不能调用非静态的变量和方法,动态方法可以调用静态方法和变量
单选题
- 以下代码的执行结果是:C
public class Example {
static int i = 1, j = 2; //=>i=3
static {
display(i);//1
i = i + j;//i=3
}
static void display(int n) {
System.out.println(n);
}
public static void main(String[] args) {
display(i);
}
}
执行流程
① 程序体内有static静态代码块 ,优先执行,调用静态方法display执行,传入实参 i = 1,打印1;然后执行 i = i + j ,结果是i = 3 ; 继续执行main方法再次调用display 传入实参 i 此时 i 的值是 3 ,所以打印 3;程序结束 输入 1 , 3
- A. 1 2
- B. 0 1
- C. 1 3
- D. 1 1
2. 关于Java中继承的说法,正确的是( B )
==java类只允许单继承,接口可以多继承,类可以通过实现接口来实现多继承==
A.类允许多继承 x
B.接口允许多继承 √
C.接口和类都允许多继承 x
D.接口和类都不允许多继承 x
-
下列说法错误的是?( C )
A.Object类是所有Java类的顶层类,即类继承树的根。 √
B.如果一个类没有使用extends关键字扩展任何类,则编译器自动将创建的类视为Object类的子类√
C.Object类中提供了equals()方法来判定本对象和其他对象中的内容是否一致x Object底层是用==来实现的,比较的是内存地址
D.Object中提供的clone默认为浅克隆 √ -
下面关于变量的陈述哪个是不对的?( B )
A.实例变量是类的成员变量√
B.成员常量在声明时可以不进行初始化X 常量必须有初始值,且值一旦确定就不能修改
C.局部变量在使用前必须被初始化√
D.静态变量不依赖类的实例√ -
如下代码,输出结果( A )
public class E {
static int i = 10;
static {
System.out.println(this.i); // X 静态块儿里面不能使用this调用,以为this是非静态调用
}
public static void main(String[] args) {
E.i++;
System.out.println(E.i);
}
}
A.编译失败
B.10 11
C.11 12
D.10 10
- 以下代码输出结果(C)
public static void main (String args[]) {
Integer integer1 = 129;
Integer integer2 = 129;
Integer integer3 = new Integer(100);
System.out.println(integer1==integer2); // 超出常量池范围 -128~127 所以两个interage地址不同
System.out.println(integer2==integer3);
}
A.trut true
B.true false
C.false false
D.false true
- 如下代码输出结果是什么?(B)
public class Example {
int a = 10;
static int b = 20;
public static void main(String[] args) {
Example e1 = new Example();
Example e2 = new Example();
e1.a = 1;
e1.b = 2;
System.out.println(e1.a); =>1
System.out.println(e2.a); =>10
System.out.println(e2.b); =>2
}
}
A.1 1 2
B.1 10 2
C.1 1 20
D.10 10 20
-
包装类常量池的范围(A)
A.负128到正127
B.负127到正127
C.负128到正128
D.负127到正128 -
如下代码输出结果:(D)
class Person{
public static void t1() {
System.out.println("helloworld1");
}
public void t2() {
System.out.println("helloworld2");
}
public static void main(String[] args) {
((Person)null).t1(); // 第1行 (Person)null实际上是通过Person调用的t1方法 反编译之后这一句代码是 t1();
((Person)null).t2();// 第2行 (Person)null只有在运行的时候才能发现是null所以运行报错
}
}
A.第1行编译通过,第2行编译失败
B.第1行和第2行都编译失败
C.第1行运行成功输出helloworld1,第2行编译失败
D.第1行运行成功输出helloworld1,第2行运行失败
- 有String s = “Metallica”;请问以下哪个语句可以打印输出ica。(b)
A.System.out.println(s.substring(7)); =》 ca
B.System.out.println(s.substring(6)); =》ica
C.System.out.println(s.substring(6,8)); =》ic
D.System.out.println(s.substring(7,9)); =》ca
多选题
- 现有以下代码:(CD)
interface W {}
class Z implements W {}
class X extends Z {}
class Y extends Z {}
只有存在父子关系才能进行强制转换
-
下列哪些代码段是正确的?
A.
X x=new X();
Y y=new Y();
Z z=new Z();
y=(Y)x;
B.
X x=new X();
Y y=new Y();
Z z=new Z();
x=(X)y;
C.
X x=new X();
Y y=new Y();
Z z=new Z();
z=(Z)x;
D.
X x=new X();
Y y=new Y();
Z z=new Z();
W w=(W)x; -
请选择所有的正确答案?(BC)
A.接口中存在变量成员 接口的中定义的属于全局常量
B.在接口中定义的变量默认为public、static、final的√
C.一个接口可以继承多个接口√
D.关键字implements代表接口之间的继承关系 implements是实现
判断
-
在接口中定义的变量默认为public、static、final的(√)
-
使用implements实现接口中的多重继承( X ) extends是继承
-
抽象类中至少包含1个抽象方法,也可以有普通方法( X ) 抽象类可以没有抽象方法
-
在多态环境下,调用成员变量时使用父类声明的版本,调用成员方法时使用子类声明的版本( √ )
-
final修饰的方法不能被重载 ( X ) 不能重写
简答题或编程题
-
解释自动拆装箱
- JDK1.5之后允许包装类和简单类自动转换,包装类转换成简单类是 拆装, 简单类转换成包装类是 装箱过程是包装器调用了valueOf , 拆箱过程是包装器调用了xxxValue
-
抽象类和接口的区别
- 修饰词不同 抽象类是abstract 接口是 interface;
- 接口只能定义public static final的静态常量,抽象类没有限制
- 接口可以多继承,抽象类只能单继承
- 抽象类中可以有抽象方法,可以有普通方法,也可以有构造函数
- 接口只能有抽象方法 , jdk1.8之后才能在接口定义default方法,且没有构造方法