(反射技术)使用Class类中的forName方法获取class文件对象,会执行类中的静态代码块

类:

package com.ccc.demo03Class;
    
public class Person {
    static {
        System.out.println("静态代码块!");
    }
}

测试类:

package com.ccc.demo03Class;
    
 public class Demo02Reflect {
    public static void main(String[] args) throws ClassNotFoundException {
        /*
            使用Class类中的forName方法获取class文件对象,会执行类中的静态代码块
         */
        Class clazz = Class.forName("com.ccc.demo03Class.Person");
    }
}

注意:静态代码块在类加载时调用,并且只调用一次

浅谈静态代码块的使用


Java误区: 静态代码块,会在类被加载时自动执行?

静态代码块在类加载的时候不会执行,只有在类初始化的时候执行

当虚拟机载入某个 class文件时,首先生成该 class文件对应的类Class对象,所以 Class.forName() 方法在进行类的加载时,生成了对应的 类的Class对象,并且调用了其中的静态代码块。

但是反过来应该不成立,即你得到了该 class文件 对应的 类的Class对象 时(有点拗口,注意大小写),并不一定就加载了该 class文件对应的类类名.class 方法得到了对应的 Class对象 ,但是并没有加载该类,没有加载自然就不会执行静态代码块的内容。如下图所示:
在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值