A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ciying88 中级黑马   /  2017-3-11 00:35  /  1085 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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的值

1 个回复

正序浏览
顺序为先装载全局变量和方法 ,再装载有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”,完毕
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马