获取字节码对象的方式和区别

三种方式:

  1. 对象.getClass() 方法是 Object 的方法。 是其他类继承Object的getClass方法。

  2. 类名.class,你可以理解为字节码本身就是静态的,类加载的时字节码就进JVM了。所以类.class好比类调用静态方法似得调用字节码对象。

  3. Class.forName()是Class类的静态方法。参数是字符串,字符串是类的全路径名。

区别:

  1. 对象.getClass()必须要有对象,那么必须有对象。所以你得先创建对象。创建这个类对象的前提就是,你能访问到这个类(访问修饰符满足),你建对象的时候必须成功。

  2. 类名.class,那你必须要引用到这个类。(要么该类同包,要么import进来),例如:必须要import java.io.InputStream; 才能 InputStream.class
    当然也可以 java.io.InputStream.class

以上两种方式,不满足上面说的条件,编译不会通过,直接报错

  1. Class.forName("类的全路径名") ,因为参数是字符串,所以你随便写,都会编译通过。如果全路径写错了,运行才会报错。第三种方式,可以最后才将类全路径名读入,所以常用与反射,类名不确定也不会编译错,就可以根据自己需要随意配置。

另外,仅有第二种方式:类名.class支持九种类型(八种基本类型+void)

//原因:九种类型没对象,不支持第一种方式
//原因:九种类型没有不是类,没路径,没法写全路径名

例如:

Class  clazz=int.class;    //返回字节码为int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值