zoukankan      html  css  js  c++  java
  • 子父类不同属性代码执行顺序

    执行顺序

    1、 父类的静态代码块 父类的静态属性成员(java虚拟机加载类时就会执行该代码,并且只执行一次),两者的执行顺序取决于他们在程序中出现的顺序

    2、 子类的静态代码块 子类的静态属性成员(java虚拟机加载类时就会执行该代码,并且只执行一次),两者的执行顺序取决于他们在程序中出现的顺序

    3、 父类的普通属性默认初始化(普通成员变量),就是在类定义时就赋值的语句

    4、 父类的普通代码块(每次new,每次执行)

    5、 父类的构造函数(每次new,每次执行)

    6、 子类的普通属性默认初始化(普通成员变量)就是在类定义时就赋值的语句

    7、 子类的普通代码块(每次new,每次执行)

    8、 子类的构造函数(每次new,每次执行)

     注意:java中成员属性在显式初始化之前会进行自动初始化,这是不同于c、c++的

    特例:当前类的成员变量就是当前类的对象

    如果成员变量在定义时就new对象,那么当前成员必须为静态变量,否则会运行时报错,并且此时new就直接调用了构造函数,不用等类加载完成

    public class Store {
        static Store s1 = new Store();
        static Store s2 = new Store();
        Store(){
            System.out.println("执行构造器方法");
        }
        static{
            System.out.println("执行静态代码块");
        }
    
        public static void main(String[] args) {
            Store store = new Store();
        }
    
    }
    
    输出:执行构造器方法
    执行构造器方法
    执行静态代码块
    执行构造器方法

    如果成员变量在定义时只是声明,那么当前成员不必为静态变量,当对它进行赋值时类已经加载完成

    public class Store {
        Store s1 ;
        Store s2 ;
        Store(){
            System.out.println("执行构造器方法");
        }
        static{
            System.out.println("执行静态代码块");
        }
    
        public static void main(String[] args) {
            Store store = new Store();
        }
    
    }
    输出:执行静态代码块
    执行构造器方法
  • 相关阅读:
    SQL注入攻击三部曲之进阶篇
    SQL注入攻击三部曲之入门篇
    父页面(JSP页面)传参数到子页面(JSP页面)
    Flex弹出窗口请求Action函数
    dojo表格分页插件报错
    堆栈溢出问题 调试到位置(test dword ptr [eax],eax ; probe page.)局部数组变量定义所分配的最大空间为1M
    改装的表格
    FusionCharts饼图中label值太长怎么解决
    dojo中的dojox/grid/EnhancedGrid表格报错
    dojo表格分页之各个参数代表的意义(一)
  • 原文地址:https://www.cnblogs.com/zhaolei1996/p/10566597.html
Copyright © 2011-2022 走看看