zoukankan      html  css  js  c++  java
  • 构造函数,构造代码块,静态函数的执行顺序

    静态代码块》构造代码块》构造函数》普通代码块

    当调用静态内部列时,并不会引起外部类的初始化

    https://blog.csdn.net/qq_27093465/article/details/75339803

    1:调用类中的字段

    package functionExecutionSequence;
    
    /**
     * @program: GradleTestUseSubModule
     * @author: Yafei Li
     * @create: 2018-09-10 15:22
     **/
    public class ClassA {
        public static void main(String[] args){
    
    //        System.out.println("ClassA");
            System.out.println(ClassC.str);
    //        System.out.println("----------------------------");
    //        ClassC c=new ClassC();
    //        System.out.println(c.str);
        }
    
        static {
            System.out.println("staticClassA");
        }
        {
            System.out.println("contructClassA");
        }
    
        ClassA(){
            System.out.println("contructFunctionClassA");
        }
    
    }
    
    class ClassB{
        static {
            System.out.println("staticClassB");
        }
        {
            System.out.println("contructClassB");
        }
    
        ClassB(){
            System.out.println("contructFunctionClassB");
        }
    }
    
    class ClassC extends ClassB{
        public static String str="ClassC";
        static {
            System.out.println("staticClassC");
        }
        {
            System.out.println("contructClassC");
        }
    
        ClassC(){
            System.out.println("contructFunctionClassC");
        }
    }

    结果: 静态函数中都会执行。

    staticClassA
    staticClassB
    staticClassC
    ClassC

    2:创建对象实例调用对象中的字段。

    package functionExecutionSequence;
    
    /**
     * @program: GradleTestUseSubModule
     * @author: Yafei Li
     * @create: 2018-09-10 15:22
     **/
    public class ClassA {
        public static void main(String[] args){
    
    //        System.out.println("ClassA");
            System.out.println(ClassC.str);
            System.out.println("----------------------------");
            ClassC c=new ClassC();
            System.out.println(c.str);
        }
    
        static {
            System.out.println("staticClassA");
        }
        {
            System.out.println("contructClassA");
        }
    
        ClassA(){
            System.out.println("contructFunctionClassA");
        }
    
    }
    
    class ClassB{
        static {
            System.out.println("staticClassB");
        }
        {
            System.out.println("contructClassB");
        }
    
        ClassB(){
            System.out.println("contructFunctionClassB");
        }
    }
    
    class ClassC extends ClassB{
        public static String str="ClassC";
        static {
            System.out.println("staticClassC");
        }
        {
            System.out.println("contructClassC");
        }
    
        ClassC(){
            System.out.println("contructFunctionClassC");
        }
    }

    执行结果:当调用对象中的属性和行为时,静态代码块都会执行。  构造函数和构造代码块,当创建对象时,才执行。

    但是,静态方法只会执行一次。

    staticClassA
    staticClassB
    staticClassC
    ClassC
    ----------------------------
    contructClassB
    contructFunctionClassB
    contructClassC
    contructFunctionClassC
    ClassC

    3:将类中的字段修改为final修饰。

    package functionExecutionSequence;
    
    /**
     * @program: GradleTestUseSubModule
     * @author: Yafei Li
     * @create: 2018-09-10 15:22
     **/
    public class ClassA {
        public static void main(String[] args){
    
    //        System.out.println("ClassA");
            System.out.println(ClassC.str);
            System.out.println("----------------------------");
    //        ClassC c=new ClassC();
    //        System.out.println(c.str);
        }
    
        static {
            System.out.println("staticClassA");
        }
        {
            System.out.println("contructClassA");
        }
    
        ClassA(){
            System.out.println("contructFunctionClassA");
        }
    
    }
    
    class ClassB{
        static {
            System.out.println("staticClassB");
        }
        {
            System.out.println("contructClassB");
        }
    
        ClassB(){
            System.out.println("contructFunctionClassB");
        }
    }
    
    class ClassC extends ClassB{
        public static final String str="ClassC";
        static {
            System.out.println("staticClassC");
        }
        {
            System.out.println("contructClassC");
        }
    
        ClassC(){
            System.out.println("contructFunctionClassC");
        }
    }

    结果:  则类中的静态方法不会调用

    staticClassA
    ClassC
    ----------------------------
  • 相关阅读:
    js 数组去重求和 (转载)
    表格插件汇总(转载)
    SQL Server 用一张表的数据更新另一张表的数据(转载)
    C#创建DataTable(转载)
    C# DataTable 和List之间相互转换的方法(转载)
    维度表,实体表,事实表之间的关系
    Scala中foldLeft的总结
    Scala集合Map
    从合并两个Map说开去
    UDAF(用户自定义聚合函数)求众数
  • 原文地址:https://www.cnblogs.com/liyafei/p/9620148.html
Copyright © 2011-2022 走看看