A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© z2585261 中级黑马   /  2016-2-23 22:49  /  682 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class HelloA {

    public HelloA() {
        System.out.println("HelloA");
    }
   
    { System.out.println("I'm A class"); }
   
    static { System.out.println("static A"); }

}

public class HelloB extends HelloA {
    public HelloB() {
        System.out.println("HelloB");
    }
   
    { System.out.println("I'm B class"); }
   
    static { System.out.println("static B"); }
   
    public static void main(String[] args) {
     new HelloB();
   }

}

2 个回复

正序浏览
首先,你得先看懂结构,这两个类都由三个部分组成,以父类HelloA为例:  //无参构造方法   public HelloA() {         System.out.println("HelloA");     }    //构造代码块     { System.out.println("I'm A class"); }     //静态代码块     static { System.out.println("static A"); } 然后,为了得出正确结果,我们得知道它要考察哪些知识点: 1.子类初始化的顺序:先完成父类的初始化,然后再进行子类的初始化,某一个类自己的初始化经过默认初始化,显示初始化,构造初始化,本题只涉及构造初始化,因为类中都没有成员变量 2.静态代码块随着类的加载而加载,也就是说一旦类的class文件被加载到内存,静态代码块就被执行。因此当看到    public static void main(String[] args) {       new HelloB();  而且他又是子类,所以父类先加载,子类再加载。 3.类加载完,就到了初始化,构造代码块无论位置在哪,都优先于构造方法执行 答案同楼上
回复 使用道具 举报
这个涉及到了类加载的过程:
简单说一下就是:
结构就是:
static A
static B
I'm A class
HelloA
I'm B class
HelloB

1、static代码块随类的加载而加载,所以他是第一个加载进来的,如果有父类,就先执行父类;
2、关于构造代码块:
     第一种 :是JAVA 完全摒弃了构造代码块 就是说不存在构造代码块
         原因:现实开发中没有见到过
     第二种:是JAVA 存在构造代码块 但是开发中不用
         作用:对 对象 进行初始化 与构造函数相似 执行在构造函数之前 并且只要建立一个对象,构造代码块都会       执行一次 构造函数则不一定每个对象建立时都执行(多个构造函数情况下,建立对象时传入的参数不同 初始化使用对应的构造函数)

3、构造代码块执行后就是构造函数了,对对象进行初始化。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马