黑马程序员技术交流社区
标题:
静态代码执行顺序问题
[打印本页]
作者:
chuanyueing
时间:
2013-2-21 12:17
标题:
静态代码执行顺序问题
本帖最后由 朱玺 于 2013-2-21 12:22 编辑
这里有几个疑问,1:{System.out.println("c"+this.num)},在程序里可以直接括号里面写程序?这个叫什么结构?
2:为什么执行顺序是先a之后是c,而我认为是先a在d,关键是搞不懂问题1是什么结构,哪位大侠给详细解释下,谢谢了![qq]630634604[/qq]
class StaticCode
{
int num = 9;
StaticCode()
{
System.out.println("b");
}
static
{
System.out.println("a");
}
{
System.out.println("c"+this.num);
}
StaticCode(int x)
{
System.out.println("d");
}
public static void show()
{
System.out.println("show run");
}
}
class StaticCodeDemo
{
public static void main(String[] args)
{
new StaticCode(4);//a c d
}
复制代码
作者:
黑马刘杰
时间:
2013-2-21 12:30
问题一是动态代码块啊,动态代码块在类加载的时候就会执行,不过是在静态代码块后面。
代码块只在类加载时时执行,也就是只执行一次,大都用于初始化数据。
作者:
黑马李超
时间:
2013-2-21 12:36
对象初始化的过程是先执行static代码块,然后是进行默认初始化,接着是对属性进行显示初始化,最后是构造函数初始化。
System.out.println("c"+this.num);是显示初始化 ,所以在构造函数初始化之前。
作者:
罗理
时间:
2013-2-21 13:16
程序初始化时先执行静态代码块static{},在执行非静态代码块{},然后执行构造函数 StaticCode(int x)。如果有继承关系的话,先在父类中找有没有静态代码块,有就执行,再在子类中找静态代码块执行;接着先在父类中先看有没有非静态代码块可以执行,然后执行父类的构造函数;再到子类中执行子类的非静态代码块,然后是子类的构造函数。
{System.out.println("c"+this.num)}-----非静态代码块
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2