黑马程序员技术交流社区
标题:
求解释一下输出顺序问题
[打印本页]
作者:
徐君
时间:
2013-11-18 18:25
标题:
求解释一下输出顺序问题
class StaticCode{
static{
System.out.println("A");
}
public void show(){
System.out.println("show run");
}
}
public class StaticCodeDemo {
static{
System.out.println("B");
}
public static void main(String[] args) {
new StaticCode().show();
}
static{
System.out.println("C");
}
}
接果为嘛会是B C A。。
作者:
zuiaichiyu
时间:
2013-11-18 18:39
public class StaticCodeDemo {
static{
System.out.println("B");
}
public static void main(String[] args) {
new StaticCode().show();
}
static{
System.out.println("C");
}
}
java虚拟机运行时先加载StaticCodeDemo 类。
静态代码块随了类的加载而加载,用于对类进行初始化,
StaticCodeDemo 类中的两个静态代码块先后执行打印出BC
接着主函数执行 ,建立StaticCode对象,同样先执行StaticCode类中的静态代码块打印出A
接着show方法运行
作者:
″先森丶玹°
时间:
2013-11-18 18:44
static{
System.out.println("B");
}
static{
System.out.println("C");
}
static{
System.out.println("A");
}
这个叫静态代码块,是随着类的加载就加载,简单说就是优先主函数main执行。
当你new StaticCode().show(); 时,静态代码块就加载了,按顺序B C A 执行完之后才执行show(); 也就是 show run
作者:
段光宇
时间:
2013-11-18 18:47
1、程序开始时,首先去加载带有main函数的类,即首先加载主类StaticCodeDemo,主类中有两个static函数体,它们随着主类的加载而加载,所以首先输出B、C
2.执行完两个static函数,开始执行main函数,main函数里调用了StaticCode类中的show方法,首先要建立StaticCode类的对象,同样的,StaticCode类中有一个static函数体,随着对象的建立,这个函数体随着类的加载而加载,所以输出A
3、StaticCode类执行完一个static函数,开始执行show函数,输出show run。
就记住一点,static随着类的加载而加载,不用生成对象即可使用。
作者:
Faner
时间:
2013-11-18 18:57
静态代码块 随着类的加载而同时加载 已加载 static{ System.out.println("B"); } 和static{
System.out.println("C"); 就优先运行 故输出 B C 虽然两句位置不在一起 但是StaticCodeDemo 已加载 她们都是优先加载的 然后再运行 new StaticCode().show(); 这个new StaticCode() 已创建 匿名对象 就开始调用
class StaticCode 但是static{ System.out.println("A"); 优先运行 故输出A
作者:
hurryup
时间:
2013-11-18 19:02
1.jvm在执行你这段代码时,首先找到主程序入口所在类,即public static void main()所在类,StaticCodeDemo,先把它加载到内存中,同时发现有静态代码块,就安代码先后顺序,随类的加载而加载并执行,所以会先打印B,后打印C.
2.主程序中,对类StaticCode初始化,并将其加载到内存中,首先先查看是否有静态代码块,有就先执行,那么就打印出C,最后调用了该对象的Show()方法。
作者:
zdrain
时间:
2013-11-18 19:23
首先,static静态代码块用于类的初始化,类加载,它就运行,所以当javac的时候,主函数所在类的静态代码块就执行了,b c就打印了。
然后执行main函数里的内容。
new StaticCode的时候这个类加载进内存,所以这个类的静态代码块执行,打印A.
然后调用show方法,打印show run。
总之,执行顺序,静态代码块,显示初始化,构造代码块,构造函数,具体内容。这个好像得背下来
作者:
徐君
时间:
2013-11-18 21:14
哦哦,晓得了。。谢谢各位哈
作者:
默狼
时间:
2013-11-18 21:25
程序编译时会先加载主函数。而在运行的时候会先运行静态代码块的代码,然后是加载方法代码,调用方法里的show方法执行结果、
作者:
FFF
时间:
2013-11-19 00:17
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2