• java基础面试题17--类的加载、对象的加载流程



    要知道该代码的执行顺序,首先明确:
      1.静态代码顺序执行,请牢记!!!
      2.静态代码块 -> 构造代码块 -> 构造方法

    public class JDtest1 {
    
    
        public static JDtest1 t1 = new JDtest1(); //静态成员变量 
    
        {
            System.out.println("blockA"); //构造代码块
        }
    
        static{
            System.out.println("blockB"); //静态代码块
        }
    
        public static void main(String[] args) {
            JDtest1 t2 = new JDtest1(); 
        }
    
    }
    


    1.在该代码中,加载类JDtest1时,首先执行的第一行代码,定义静态成员变量 t1,(静态成员是类所有的对象的共享的成员,而不是某个对象的成员。)
    2.定义的t1的同时,又new了一个新的对象出来,这个对象是本类对象,new的过程中,首先要执行构造代码块,即输出了“blockA”
    3.接着,执行下一行static代码块,输出“blockB”,至此,类加载完成
    4.执行main方法,同样,new了一个JDtest1对象,接下来要执行的是构造代码块,输出“blockA”

    因此,最终输出:
    blockA
    blockB
    blockA

    例题2:

    public class StaticVariableTest1 {
        private static StaticVariableTest1 obj = new StaticVariableTest1();
        private static int counter1;
        private static int counter2 = 0;
    
        private StaticVariableTest1(){
            counter1++;
            counter2++;
        }
    
        public static StaticVariableTest1 getInstance(){
            return obj;
        }
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            StaticVariableTest1 obj = StaticVariableTest1.getInstance();
            System.out.println("obj.counter1=="+obj.counter1);
            System.out.println("obj.counter2=="+obj.counter2);
        }
    
    }
    


    结果:
    obj.counter1==1
    obj.counter2==0

    执行过程详解:
    从main函数开始
    1 类加载的过程:
     1.1 先执行第一句static代码,new对象的时候,调用了构造方法
    构造方法执行完毕之后,counter1==1,counter2==2
     1.2 接着执行第3句,赋值语句,将counter2赋值为0
    2 获取实例过程
     通过getInstance的return ,返回一个在静态加载时已经创建的实例
    3 打印
     打印counter1  --1
     打印counter2  --0

  • 相关阅读:
    用原生PHP做Blog系统-Day01
    PHP做猜数字游戏
    关于html头部引用(meta,link)
    gulp基本入门
    前端构建工具gulpjs的使用介绍及技巧
    $.ajax()方法详解 jquery中的ajax方法
    js string 转 int 注意的问题——parseInt
    经常玩电脑怎么防辐射
    js 禁止重复提交
    jquery 监听回车提交
  • 原文地址:https://www.cnblogs.com/shiguangmanbu2016/p/5932800.html
Copyright © 2020-2023  润新知