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培训

posted on 2011-09-06 19:38  www_ding@163.com  阅读(297)  评论(0编辑  收藏  举报