反射获取字节码对象的几种方式

一、几种方式:

**1.类名.class方式方式 :** 
**2.Class.forName()方式:**
**3.Demo1.class.getClass()**

**4.类名.class**

二、区别:

**总结:**
         

**类名.class方式方式 :** 只会加载类,不会执行静态代码块,不会实例化对象)-
**Class.forName()方式:**会加载类,会执行静态代码块, 不会实例化对象
**Demo1.class.getClass()得到的Class对象和类名.class得到的Class对象有点儿区别**
    (泛型不同,具体待以后研究)(本案例用类名.class.getClass()执行invoke会报异常)

package reflect;


class Demo1{
    public final static   String s="demo1";//static和final顺序可以调换
    static {
        System.out.println("静态块");
    }
    Demo1(){
        System.out.println("用构造Demo1()方法, 实例化了Demo1类型对象");
    }
}


public class ClassDemo {
    public static void main(String[] args) throws Exception {
        //1.
        //System.out.println(Demo1.s);//访问final static 修饰的变量不会实例化对象

        //System.out.println("2.---类名.class方式
        //        (只会加载类,不会执行静态代码块,不会实例化对象)----");
        //  Class<Demo1>  cls1=Demo1.class;

        //System.out.println("3.---new 类名()方式: 
        //    (会加载类,会执行静态代码块,也会实例化对象)----");
        //  Demo1  d1=new Demo1();

        //System.out.println("4.---Class.forName()方式: 
          //      (会加载类,会执行静态代码块,不会实例化对象)");
        //  Class.forName("reflect.Demo1");

        //类名.class.getClass()和类名.class得到的Class对象有点儿区别
        // (泛型不同,具体待以后研究)(本案例用类名.class.getClass()执行invoke会报异常)
        Class<? extends Class> aClass = Demo1.class.getClass();
        Class<Demo1>           demo1Class = Demo1.class;
        //总结:
        // 类名.class方式方式 : 只会加载类,不会执行静态代码块,不会实例化对象)-
        // Class.forName()方式:会加载类,会执行静态代码块, 不会实例化对象
        //Demo1.class.getClass()得到的Class对象和类名.class得到的Class对象有点儿区别
         // (泛型不同,具体待以后研究)(本案例用类名.class.getClass()执行invoke会报异常)
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值