黑马程序员技术交流社区

标题: 猜猜这代码的顺序和输出结果 [打印本页]

作者: ciying88    时间: 2017-3-11 00:35
标题: 猜猜这代码的顺序和输出结果

public class StaticTest {
       
        public static void main(String[] args){
                               
                staticFunection();                       
        }
       
        static StaticTest st = new StaticTest();
       
        static{
                System.out.println("1");
        }
       
        {
                System.out.println("2");
        }
       
        public StaticTest() {
                // TODO Auto-generated constructor stub
                System.out.println("3");
                System.out.println("a ="+ a +", b="+b);
        }
       
        public static void staticFunection(){
                System.out.println("4");
        }
       
        int a = 110;
        static int b = 112;
}
猜一下输出顺序和a,b的值
作者: xiaoxiaoyuxie    时间: 2017-3-11 13:10
顺序为先装载全局变量和方法 ,再装载有static修饰的类变量和类方法, 装载完毕后再执行main方法
所以按照自上而下执行的顺序为 1:先执行print(“2”),因为该括号没有任何修饰符,2:装载StaticTest方法(是装载不是执行)然后跳过下面所有static修饰的类和方法执行int a=110,3:全局变量至此装载完毕 ,下面的static b=112属于类变量延后执行,4:开始跳回代码头部继续装载类变量和类方法 第一行装载main方法(这里是还是装载并不是调用哦)继续执行 static StaticTest st=new StaticTest(),5:因为4:创建了StaticTest的实例,那么开始执行StaticTest的构造器方法打印print(“3”),打印a、b的值时a已经赋值=110,b还没赋值所以为初始值0,6:打印完毕后继续从static{System.out.print(“1”)}执行打印“1”,7:自上而下继续装载staticFunction类方法,8:装载static b=112给b赋值,9:至此所有变量和方法全部装载完毕,程序开始自动调用main()方法,所以里面的staticFunction()类方法会被调用,10:类方法被调用时打印print“4”,完毕





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2