• java 中类的加载顺序


    参考: http://www.cnblogs.com/guoyuqiangf8/archive/2012/10/31/2748909.html

     1、虚拟机在首次加载Java类时,会对静态初始化块、静态成员变量、静态方法进行一次初始化
     2、只有在调用new方法时才会创建类的实例
     3、类实例销毁时候,首先销毁子类部分,再销毁父类部分

    package com.xiaofan.class_initialization;
    
    public class Parent
    {
        public static int i = initializationParentStaticField(); // 静态成员变量
        int j = initializationParentField(); // 类成员变量
        
        public static int initializationParentStaticField(){
            System.out.println("父类静态成员变量");
            return -1;
        }
        
        public int initializationParentField() {
            System.out.println("父类类成员变量");
            return -1;
        }
    
        {
            System.out.println("父类非静态代码块");
        }
        
        static
        {
            System.out.println("父类静态代码块");
        }
        
        public Parent()
        {
            System.out.println("父类的构造方法");
        }
        
        public static int parentStaticMethod()
        {
            System.out.println("父类的静态方法");
            return -1;
        }
        public int parentMethod(){
            System.out.println("父类的非静态方法");
            return -1;
        }
        
        @Override
        protected void finalize() throws Throwable
        {
            super.finalize();
            System.out.println("销毁父类");
        }
        
    }
    package com.xiaofan.class_initialization;
    
    public class Child extends Parent
    {
        public static int i = initializationChildStaticField(); // 静态成员变量
        int j = initializationChiledField(); // 类成员变量
        
        public static int initializationChildStaticField(){
            System.out.println("子类静态成员变量");
            return 0;
        }
        
        public int initializationChiledField() {
            System.out.println("子类类成员变量");
            return 0;
        }
        {
            System.out.println("子类非静态代码块");
        }
        static
        {
            System.out.println("子类静态代码块");
        }
        public Child()
        {
            System.out.println("子类的构造方法");
        }
       
        public static int childStaticMethod()
        {
            System.out.println("子类的静态方法");
            return 0;
        }
        public int childMethod(){
            System.out.println("子类的非静态方法");
            return 0;
        }
        @Override
        protected void finalize() throws Throwable
        {
            super.finalize();
            System.out.println("销毁子类");
        }
    }
    package com.xiaofan.class_initialization;
    
    public class TestMain
    {
       
        public static void main(String[] args)
        {
            Parent.parentStaticMethod();
    //        Child child = new Child();
    //        Child.childStaticMethod();
        }
    
    }

    输出:

    Parent.parentStaticMethod();

    类中static 方法在第一次调用时加载,类中static成员按在类中出现的顺序加载。

    父类静态成员变量
    父类静态代码块
    父类的静态方法

    注释掉Parent.parentStaticMethod();

    去掉注释Child child = new Child();

    父类静态成员变量
    父类静态代码块
    子类静态成员变量
    子类静态代码块
    父类类成员变量
    父类非静态代码块
    父类的构造方法
    子类类成员变量
    子类非静态代码块
    子类的构造方法

    注释掉Child child = new Child();

    去掉注释Child.childStaticMethod();

    父类静态成员变量
    父类静态代码块
    子类静态成员变量
    子类静态代码块
    子类的静态方法

    总结:

    一个类,只调用其static方法,加载顺序:
        1.静态成员变量
        2.静态代码块: static {}
        3.被调用的静态方法
     
    子类继承父类,new子类,加载顺序:
        1.父类的静态成员变量
        2.父类的静态代码块: static {}
        3.子类的静态成员变量
        4.子类静态代码块: static {}
        5.父类类成员变量
        6.父类非静态初始化块 {}
        7.父类的构造方法
        8.子类类成员变量
        9.子类非静态代码块 {}
        10.子类的构造方法
     
    调用子类的静态方法,加载顺序:
        父类静态成员变量
        父类静态代码块
        子类静态成员变量
        子类静态代码块
        子类的静态方法
  • 相关阅读:
    <EditText /> This text field does not specify an inputType or a hint
    phpmailer【PHP邮件】的用法
    IOS-Quartz2D(Paths元素)
    IOS-网络(网页开发-UIWebView,HTML,CSS,JavaScript,OC和JS代码互调)
    IOS学习路线图
    Android学习必备--java工具15个
    IOS-网络(ASI使用)
    IOS-网络(ASIHTTPRequest的使用简介)
    IOS-网络(AFNetworking)
    IOS-网络(文件压缩和解压缩)
  • 原文地址:https://www.cnblogs.com/vaer/p/4306145.html
Copyright © 2020-2023  润新知