黑马程序员技术交流社区
标题:
这是什么意思
[打印本页]
作者:
z2585261
时间:
2016-2-23 22:49
标题:
这是什么意思
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();
}
}
作者:
zzh111
时间:
2016-2-23 23:29
这个涉及到了类加载的过程:
简单说一下就是:
结构就是:
static A
static B
I'm A class
HelloA
I'm B class
HelloB
1、static代码块随类的加载而加载,所以他是第一个加载进来的,如果有父类,就先执行父类;
2、关于构造代码块:
第一种 :是JAVA 完全摒弃了构造代码块 就是说不存在构造代码块
原因:现实开发中没有见到过
第二种:是JAVA 存在构造代码块 但是开发中不用
作用:对 对象 进行初始化 与构造函数相似 执行在构造函数之前 并且只要建立一个对象,构造代码块都会 执行一次 构造函数则不一定每个对象建立时都执行(多个构造函数情况下,建立对象时传入的参数不同 初始化使用对应的构造函数)
3、构造代码块执行后就是构造函数了,对对象进行初始化。
作者:
huang_bing_hua
时间:
2016-2-24 09:22
首先,你得先看懂结构,这两个类都由三个部分组成,以父类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.类加载完,就到了初始化,构造代码块无论位置在哪,都优先于构造方法执行 答案同楼上
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2