反射

本文介绍了Java反射机制中获取类对象的三种方法,并通过实例演示了如何使用这些方法来实例化对象及获取对象信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Test2 {
    public static void main(String[] args) {
        //获取类对象的三个方法
        try {
            //第一种方式:此方式必须写类全名。c2引用保存保存内存地址指向堆中的对象,该对象代表的是User整个类
            //执行静态语句块
            Class cl1 = Class.forName("com.hx.shopping.test.A");//将A.class文件装载到JVM中的 过程
            Object obj = cl1.newInstance();//调用A的无参构造方法
            System.out.println(obj);//com.hx.shopping.test.A@15db9742
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        //第二种方式:Java中每个类型都有class属性
        //不会执行静态语句块
        Class cl2 = A.class;
        //第三种方式:Java语言中任何一个Java对象都有getClass方法
        //执行静态语句块
        A cl3 = new A();
        cl3.getClass();
        //其中,因为User这个类在JVM中只有一个,所以c1,c2,c3的内存地址是相同的,指向堆中唯一的一个对象
        
        try {
            Class c = Class.forName("java.util.Date");
            Object obj2 = c.newInstance();
            if(obj2 instanceof Date){
                Date date = (Date)obj2;
                System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(date));
                //2018-04-13 11:25:29 648
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        
    }
}
class A {
    A(){
        System.out.println("A类构造方法……");
    }
    static {
        System.out.println("A类静态语句块……");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值