场景:
在练习错题1描述:
子类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非静态代码块
当实例化子类对象时,首先要加载父类的class文件进内存,静态代码块是随着类的创建而执行,所以父类静态代码块最先被执行,子类class文件再被加载,同理静态代码块被先执行;实例化子类对象要先调用父类的构造方法,而调用父类构造方法前会先执行父类的非静态代码块
答案:C (我做出来了,觉得这题比较重要就拎出来了)
原因分析:
safd错题2描述:
下列哪个选项是Java调试器?如果编译器返回程序代码的错误,可以用它对程序进行调试
A.java
B.javadoc
C.jdb
D.javaprof
原因分析:
java,exe是java虚拟机
javadoc.exe用来制作java文档
jdb.exe是java的调试器
javaprof,exe是剖析工具
答案:C
错题3描述:
常用的servlet包的名称是?
A.java.servlet
B.javax.servlet
C.servlet.http
D.javax.servlet.http
原因分析:
JEE5.0中的Servlet相关的就下面这几个包:
javax.servlet
javax.servlet.jsp
java.servlet.jsp.el
java.servlet.jsp.tagext
而最用得多的就是
javax.servlet
javax.servlet.http
这两个包了.
答案:B D
错题4描述:
对于线程局部存储TLS(thread local storage),以下表述正确的是
A.解决多线程中的对同一变量的访问冲突的一种技术
B.TLS会为每一个线程维护一个和该线程绑定的变量的副本
C.每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了
D.Java平台的java.lang.ThreadLocal是TLS技术的一种实现
原因分析:
C:同一全局变量或者静态变量每个线程访问的是同一变量,多个线程同时访存同一全局变量或者静态变量时会导致冲突,尤其是多个线程同时需要修改这一变量时,通过TLS机制,为每一个使用该全局变量的线程都提供一个变量值的副本,每一个线程均可以独立地改变自己的副本,而不会和其它线程的副本冲突。C:选项后半句说没必要对变量进行同步错误。
答案:A B D
错题5描述:
往OuterClass类的代码段中插入内部类声明, 哪一个是错误的:(多选)
public class OuterClass{
private float f=1.0f;
//插入代码到这里
}
A class InnerClass{
public static float func(){return f;}
}
B abstract class InnerClass{
public abstract float func(){}
}
C static class InnerClass{
protected static float func(){return f;}
}
D public class InnerClass{
static float func(){return f;}
}
原因分析:
主要考核了这几个知识点:
1.静态内部类才可以声明静态方法
2.静态方法不可以使用非静态变量
3.抽象方法不可以有函数体
A,静态方法不可调用非静态变量 (排除)
B. 抽象方法不能有方法体(排除)
C. 静态方法不可调用非静态变量(排除)
D. 内部类跟外部类都使用了public 修饰 (排除)
答案:A B C D