Java反射机制--佐证

28 篇文章 0 订阅

这个例子很好的证明了,类加载和实例化的区别:

public class NewInstancesTest {

    public static void main(String[] args) {
        TestOne one=null;
        try {
            //类加载
            Class cl=Class.forName("reflectTest.TestOne");//引号内的作用,是指定要加载类的位置
            //实例化
            one=(TestOne)cl.newInstance();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //通过运行,我们可以看到,在类加载的时候,执行的是静态代码块
        //而调用无参构造器的时候,……

    }

}

class TestOne {

    static {
        System.out.println("执行静态代码块");
    }

    public TestOne() {
        System.out.println("执行构造器");
    }

}

说明:
在执行类加载的时候:
Class cl=Class.forName(“xxx.TestOne”),此时,程序会找到引号内那个位置的类,并加载到内存里,容易想到,该类的所有静态的内容会加载执行。
而后面的代码中:
TestOne one=null;
one=(TestOne)cl.newInstance();
这两句就是用的反射机制,将读取到的类反射到实例one中完成实例化。
至此,我算是明白了反射机制。不白费我两天的苦苦研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值