其原理如下:
- 当没有子类继承的时候
顺序:静态代码块 → main → 构造代码块 → 构造方法
public class Test { static{ System.out.println("父类静态代码块开始执行!"); } { System.out.println("父类构造代码块开始执行!"); } public Test(){ System.out.println("父类构造方法开始执行!"); } public static void main(String[] args) { System.out.println("父类开始运行main"); new Test(); } }
运行结果:
父类静态代码块开始执行!
父类开始运行main
父类构造代码块开始执行!
父类构造方法开始执行!
- 当存在继承的情况下:
执行顺序:
父类静态代码块 → 子类静态代码块 → main → 父类构造代码块 → 父类构造方法 → 子类构造代码块 → 子类构造方法
public class Test2 { static{ System.out.println("父类静态代码块开始执行!"); } { System.out.println("父类构造代码块开始执行!"); } public Test2(){ System.out.println("父类构造方法开始执行!"); } } public class Test1 extends Test2{ static{ System.out.println("子类静态代码块开始执行!"); } { System.out.println("子类构造代码块开始执行!"); } public Test1(){ System.out.println("子类构造方法开始执行!"); } public static void main(String[] args) { System.out.println("子类开始运行main"); new Test1(); } }
运行结果:
父类静态代码块开始执行!
子类静态代码块开始执行!
子类开始运行main
父类构造代码块开始执行!
父类构造方法开始执行!
子类构造代码块开始执行!
子类构造方法开始执行!
所以这题选D
2. 对栈的理解(先进后出)
A: 从6一直进到4 的时候, 4开始出栈一直出到5出栈然后3进栈, 此时1 还没有入栈, 而且他要入栈的话前面还有一个2, 所以A错误, 选A
3. try - catch - finally语句
程序由main方法进入, 然后执行到test方法中, test方法中使用了try-catch-finally语句, 由于try雨中只有一个负值语句和一个返回值, 所以不会抛出异常, 但是句子中存在finally语句, 那么这个return 不会直接返回, 而是进入执行finally中的语句, 也就是b+=10, 然后再返回b.
所以这题的答案为 30
4.对数值转换和赋值语句的理解
A float类型是在整形范围之内的, 如果将-412的int的值直接传给float类型, 结果是安全的
b选项中的012为8进制, 012转化为10进制值为10, 所以b没问题.
c byte的取值范围为 (-128 ~ 127)_所以C错误
D 0x12345678是16进制, 对应的10进制在int范围内, 同时也没有发生截断 ,是安全的
E 由于java中的boolean类型的值仅为ture和false, 而且在java中不像C和C++, c中的0和1可以分别代表false和true, 但是在java中的对错只能用true和false, 因此false个true是没有对应的10进制的值的, 所以E错误
所以选ABD
5.编程题: 不要2;