黑马程序员技术交流社区
标题:
关于类中静态的方法、属性和代码块的执行顺序
[打印本页]
作者:
java8023
时间:
2015-6-10 23:57
标题:
关于类中静态的方法、属性和代码块的执行顺序
class Test
{
static int i=1;
static{
System.out.println(i+"看看,到底是谁在前面呢");
show2();
}
//static int i=1;
public static void main(String[] args){
Test t=new Test();
t.show();
}
public void show(){
System.out.println("测试专用!!!!静态方法调用非静态方法");
}
public static void show2(){
System.out.println("静态代码块调用静态方法!!没想到在后面也是可以的");
}
}
复制代码
很是迷惑,到底是谁先执行呢???于是写了一段代码:
可以得到几个结论:
1)静态代码块中调用静态变量,当静态属性在其后边时,执行错误,可以看出,是这两者是按照顺序执行的
2)静态属性要在之前定义,才能在静态代码中调用
3)但是静态方法就没事了,调用时才被执行.无顺序要求。
4)并且静态方法可以通过对象调用非静态方法,但是不可以直接调用
作者:
pizhihui
时间:
2015-6-11 00:03
写得很好,谢谢分享!!
作者:
java8023
时间:
2015-6-11 20:53
还是很困惑啊
作者:
zhenxing133
时间:
2015-6-11 21:23
大牛,学习了
作者:
duzhi409
时间:
2015-6-12 00:46
main方法,建立Test对象,然后Test类加载进内存,静态成员先进入方法区中的静态区,然后静态代码块执行(给类进行初始化),打印:1+"看看,到底是谁在前面呢"
调用show2(),因为也是静态的,所以也在静态区中,打印:静态代码块调用静态方法!!没想到在后面也是可以的
建立Test对象,t调用show(),打印:测试专用!!!!静态方法调用非静态方法
作者:
java8023
时间:
2015-6-12 19:35
duzhi409 发表于 2015-6-12 00:46
main方法,建立Test对象,然后Test类加载进内存,静态成员先进入方法区中的静态区,然后静态代码块执行(给 ...
嗯 说的不错就是如此,但是若是静态成员变量在后边,就不行了,会顺序执行代码块的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2