类结构——代码块之静态代码块

类结构——代码块之静态代码块

静态代码块的特点:

执行时机: 静态代码块仅在类被加载到内存时执行一次,并且是在构造任何对象之前执行。这意味着无论创建了多少个该类的对象,静态代码块都只会被执行一次。

优先级: 如果一个类中定义了多个静态代码块,那么这些静态代码块将按照它们在源代码中出现的顺序依次执行。此外,所有静态代码块都会先于构造函数执行。

package PACKAGE_NAME._01Day.tledu.com;
/*
* 静态代码块
* */
public class _01StaticContain {

    static {
        System.out.println("第1静态代码块执行!!!!!");
    }
   static int a = testStatic();
    private static int testStatic(){
        System.out.println("这个方法被静态变量引用");
        return 2021;
    }
    static {
        System.out.println("第2静态代码块执行!!!!!");
    }
    //静态代码块只能被执行一次。
    public static void main(String[] args) {
        //实例被创建。
        _01StaticContain staticContain = new _01StaticContain();
        //访问类的静态成员(静态变量或静态方法)。
        System.out.println(a);
        // 反射来加载类。
        Class clazz = _01StaticContain.class;
    }

}

运行结果:
在这里插入图片描述

异常处理: 静态代码块内可以抛出异常,但如果静态代码块内部发生未捕获的异常,则会导致整个程序停止加载该类,进而可能导致应用程序无法启动或运行失败。
在第一个静态代码块中人为制造一个异常 int a = 1/0;
在这里插入图片描述
执行main方法运行结果:
在这里插入图片描述

访问限制: 在静态代码块中可以直接访问本类中的静态成员(包括变量和方法),但是不能直接访问非静态成员。这是因为当静态代码块执行时,还没有具体的实例对象存在。

不可重复执行: 与普通的方法不同,即使再次引用同一个类也不会重新执行静态代码块。一旦类已经被加载并且其静态代码块已执行过,则后续对这个类的操作不会触发静态代码块的再执行。

继承关系下的行为: 当子类继承自父类时,在加载子类的过程中会首先加载父类(如果父类还未被加载的话)。因此,父类中的静态代码块会在子类的静态代码块之前执行。
创建一个类继承之前的”_01Day.tledu.com”类

package PACKAGE_NAME._01Day.tledu.com;

import java.lang.reflect.Field;

public class Test extends _01StaticContain {
    public static void main(String[] args) {
        System.out.println("子类方法调用");

    }
}

执行子类main方法运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值