反射的基础——Class类

                              Android培训    Java培训

反射的基础——Class

Java的反射机制是从jdk1.2开始

要学习反射首先就要学习反射的基石—javaClass

Class类代表java中的“类”。Java中的“类”是用来描述一类事物,比如:Person StringIntege….,这个“类”也是一种事物,就用Class代表

通过Class这个类我们可以了解,java中的个各类的方方面面的信息。比如:getName()能得一个类的名称,getMethods()能得到这个类中的所有方法列表等等。这和普通的类是一样的。

 

比如:

我们构建了一个Person类,创建了一个Person对象Person person = new Person();

还构建了一个Animal类,创建一个Animal对象 Animal animal = new Animal();

源代码经过编译以后变成二进制的字节码被加载到内存,当程序中用到这两个Java类,在内存就会有两份字节码,每一分字节码就是一个Class对象。所以一个Class对象就是代表在内存中的一份字节码。

 

通过什么方式搞到Class对象呢?Class classTest = new Class();吗?不是的,

因为一个Class对象就是代表在内存中的一份字节码,Class classTest = 字节码也就是

Class classTest =类名.class

获得一个类的字节码还可以这样表示 Class classTest = person.getClass();以上两种情况获得字节码是在内存中已经加载的。还有一种情况可以在内存中不存在的情况下加载字节码,Class.forName(“一个类的完整的名字”);比如Class.forName(“java.lang.String”);得到的就是String类的字节码,还存在虚拟机中。

forName();就是Class的静态方法。其作用就是加载字节码,会抛出异常ClassNotFoundException

public class Test {

 

       public static void main(String[] args) throws ClassNotFoundException {

 

              Person person = new Person();

              Class classTest1 = Person.class;

              System.out.println(classTest1);

              System.out.println(person.getClass());

              System.out.println(Class.forName("java.lang.String"));

 

        System.out.println(classTest1 == person.getClass());

       System.out.println(classTest1 == Class.forName("test.Person"));

       System.out.println(person.getClass()==Class.forName("test.Person"));

        //要实例化对象的字节码如果缓存中存在,则不在加载,因此以上它们加载的是同一个字节码对象,所以全部打印出true

             

       }

 

九个预定义的Class实例对象—八个基本数据类型(booleanbytecharshortintlongfloatdouble)和void

publicclass Test {

 

    publicstaticvoid main(String[] args) {

 

       System.out.println(boolean.class);

       System.out.println(byte.class);

       System.out.println(char.class);

       System.out.println(short.class);

       System.out.println(int.class);

       System.out.println(long.class);

       System.out.println(float.class);

       System.out.println(double.class);

       System.out.println(void.class);

 

    }

 

}

总之:在java中出现的各种数据类型都有各自的Class实例对象

                                                      Android培训    Java培训

转载于:https://www.cnblogs.com/1350995917ding/archive/2011/09/06/2169113.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值