zoukankan      html  css  js  c++  java
  • Java中类及方法的加载顺序

    1. 虚拟机在首次加载Java类时,会对静态代码块、静态成员变量、静态方法进行一次初始化(静态间按顺序执行)。

    2. 只有在调用new方法时才会创建类的实例。

    3. 类实例创建过程:父子继承关系,先父类再子类。父类的静态->子类的静态->父类的初始化块->父类的构造方法->子类的初始化块->子类的构造方法

    4. 类实例销毁时候:首先销毁子类部分,再销毁父类部分。

    package exercise;  
      
    public class Main_exer {  
        void myMethod(Object o){  
            System.out.println("object");  
        }  
        void myMethod(String s){  
            System.out.println("string");  
        }  
        public static void main(String[] args) {  
            Main_exer ma = new Main_exer();  
            ma.myMethod(null);  
        }  

    输出结果:

    string

    例:

    package classLoader_demo;
    
    public class Parent
    {
        //静态成员变量
        public static int t = parentStaticMethod2();
        //代码块
        {
            System.out.println("父类非静态初始化块");
        }
        static
        {
            System.out.println("父类静态初始化块");
        }
        //构造方法
        public Parent()
        {
            System.out.println("父类的构造方法");
        }
        //父类静态方法
        public static int parentStaticMethod()
        {
            System.out.println("父类的静态方法");
            return 10;
        }
        public static int parentStaticMethod2()
        {
            System.out.println("父类的静态方法2");
            return 9;
        }
      
        @Override
        protected void finalize() throws Throwable
        {
            // TODO Auto-generated method stub
            super.finalize();
            System.out.println("销毁父类");
        }
     
    }
    package classLoader_demo;
    
    public class Parent
    {
        //静态成员变量
        public static int t = parentStaticMethod2();
        //代码块
        {
            System.out.println("父类非静态初始化块");
        }
        static
        {
            System.out.println("父类静态初始化块");
        }
        //构造方法
        public Parent()
        {
            System.out.println("父类的构造方法");
        }
        //父类静态方法
        public static int parentStaticMethod()
        {
            System.out.println("父类的静态方法");
            return 10;
        }
        public static int parentStaticMethod2()
        {
            System.out.println("父类的静态方法2");
            return 9;
        }
      
        @Override
        protected void finalize() throws Throwable
        {
            // TODO Auto-generated method stub
            super.finalize();
            System.out.println("销毁父类");
        }
     
    }

    当main中语句为

    Parent.parentStaticMethod(); 

    输出结果:

    父类的静态方法2
    父类静态初始化块
    父类的静态方法

    注:参照文章开头第一条,且注意仅首次加载JAVA类会执行

    当main中语句为

    Child child = new Child();
            try {
                child.finalize();
            } catch (Throwable e) {
                e.printStackTrace();
            }

    输出结果:

    父类的静态方法2
    父类静态初始化块
    子类静态初始化块
    父类非静态初始化块
    父类的构造方法
    子类非静态初始化块
    子类的构造方法
    销毁父类
    销毁子类
    此处输出结果中的先输出“销毁父类”,再输出“销毁子类”,与前面提到的先销毁子类再销毁父类并不矛盾。仍然为先调用子类的销毁方法,再调用父类的销毁方法,只是super关键字的原因。

  • 相关阅读:
    蓝桥网试题 java 基础练习 特殊的数字
    蓝桥网试题 java 基础练习 杨辉三角形
    蓝桥网试题 java 基础练习 查找整数
    蓝桥网试题 java 基础练习 数列特征
    蓝桥网试题 java 基础练习 字母图形
    蓝桥网试题 java 基础练习 01字串
    蓝桥网试题 java 基础练习 回文数
    蓝桥网试题 java 基础练习 特殊回文数
    Using text search in Web page with Sikuli
    each of which 用法
  • 原文地址:https://www.cnblogs.com/zhimingxin/p/7736747.html
Copyright © 2011-2022 走看看