代码块使用细节

  • 代码块的使用细节

    1. static代码块也叫做静态代码块,作用是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次,如果是普通代码块,每创建一个对象,就执行一次。
    2. 类会在什么时候被加载
    • 创建对象实例的时候
    • 创建子类对象实例,弗雷也会被加载
    • 使用类的静态成员是(静态属性,静态方法)
    1. 普通的代码块,在创建对象实例的时候会被隐式的调用,被创建一次,就会调用一次
    2. 创建一个对象的时候,在一个类中的调用顺序是:
    • 调用静态代码块和静态属性初始化,静态代码块和静态属性初始化调用的优先级是一样的,如果有多个静态代码块和多个静态变量初始化,则按照他们定义的顺序调用
    • 调用普通代码块和普通属性的初始化,普通代码块和普通变量初始化调用的优先级一样,如果有多个普通代码块和多个普通实行初始化,则按定义顺序调用
    • 调用构造方法
    1. 构造器的最前面其实隐含了super()和调用普通代码块
    2. 创建一个子类对象时(继承关系),他们的静态代码块,静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序如下:
    • 父类的静态代码块和静态属性(优先级一样,按定义顺序执行)
    • 子类的静态代码块和静态属性(优先级一样,按定义顺序执行)
    • 父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
    • 父类的构造方法
    • 子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
    • 子类的构造方法
      代码演示
    package com.gqz.CodeBlock_;
    
    public class CodeBlockDetail {
        public static void main(String[] args) {
            new B01();
        }
    }
    
    class A01 {
        private static int n1 = getVal01();
    
        static {//(2)
            System.out.println("A的第一个静态代码块");
        }
    
        {//(5)
            System.out.println("A的第一个普通代码块");
        }
    
        public int n3 = getVal02();
    
        public static int getVal01() {//(1)
            System.out.println("getVal01");
            return 10;
        }
    
        public int getVal02() {//(6)
            System.out.println("getVal02");
            return 10;
        }
        public A01(){//(7)
            System.out.println("A01构造器");
        }
    }
    
    class B01 extends A01{
        private static int n2 = getVal03();
        static {//(4)
            System.out.println("B01的第一个静态代码块");
        }
        {//(8)
            System.out.println("B01的第一个代码块");
        }
        public int n4 = getVal04();
        public static int getVal03(){//(3)
            System.out.println("getVal03");
            return 10;
        }
        public static int getVal04(){//(9)
            System.out.println("getVal04");
            return 10;
        }
        public B01(){//(10)
            System.out.println("这是B01的无参构造");
        }
    }
    

    输出结果如图
    cefe87733a55ed409805367828fabc93.pngcefe87733a55ed409805367828fabc93.png

    1. 静态代码块只能调用静态成员(静态属性和静态方法),普通代码块可以调用任意成员。
posted @   AINIBYM  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示