选择题
1.关于包的说法, 下列错误的是:( )
题目内容:
A .包是一组类的集合
B .包能防止类的名字冲突
C .import 语句能够导入一个指定的包
D .import static 能够导入一些静态方法
答案:C
2.A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:
-
A a0=new A();
-
A a1=new B();
-
A a2=new C();
问以下哪个说法是正确的?()
题目内容:
A .只有第一行能通过编译
B .第1、2行能通过编译,但第3行编译出错
C .第1、2、3行能通过编译,但第2、3行运行时出错
D .第1行,第2行和第3行的声明都是正确的
答案:D
3.如下代码的 结果是什么 ?
class Base {
Base() {
System.out.print("Base");
}
}
public class Alpha extends Base {
public static void main( String[] args ) {
new Alpha();
//调用父类无参的构造方法
new Base();
}
}
题目内容:
A .Base
B .BaseBase
C .编译失败
D .代码运行但没有输出
E .运行时抛出异常
答案:B
(静态变量、静态初始化块:决于它们在类中出现的先后顺序)>(变量、初始化块:决于它们在类中出现的先后顺序)>构造器
原理:
1、加载类信息。在实例化对象之前,类的装载器会找到需要加载的类class文件,进行类的加载(有父类的会先加载父类),一旦加载到最根上的基类,就会对基类的静态变量和静态初始化块进行初始化;
2、当所有类信息加载完毕就会执行main()主方法,然后执行new class(),对类进行实例化,首先对变量和、初始化块以及类的构造函数进行初始化(有父类的首先会对父类进行初始化,多个父类递归的方式)
有父类的加载顺序:
父类–静态变量
父类–静态初始化块
子类–静态变量
子类–静态初始化块
子类main方法
父类–变量
父类–初始化块
父类–构造器
子类–变量
子类–初始化块
子类–构造器
4.以下程序的输出结果为
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
报错:There is no default constructor available in ‘Base’
5.以下程序执行的结果是:
class X{
Y y=new Y();
public X(){
System.out.print("X");
}
}
class Y{
public Y(){
System.out.print("Y");
}
}
public class Z extends X{
Y y=new Y();
public Z(){
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
题目内容:
A .ZYXX
B .ZYXY
C .YXYZ
D .XYZX
答案:C