简述反射的基石--Class类

       我们平时创建的java类在编译之后就会形成一段二进制码,存到内存中。而每一个二进制码就是Class类的实例化对象,那么可想而知这个Class类就应当就如下一些方法:得到java类所在的包、得到类的名字、得到类中的方法。。。。。。

       那么在实际的原程序中怎样才能得到各个字节码对应的实例对象呢,下面我们来看一下:

    (1).类名.class,例如int.class;

    (2).对象.getClass(),例如new Date().getClass();

    (3).Class.forName("类名"),例如Class.forName("java.util.Date");

package com.www.ReflectClass;
/*
 * 演示Java类获取自身字节码(就是一个Class实例化对象)的方式
 */
public class ReflectClassTest {
 
 public static void main(String[] args) throws Exception {
 
  // TODO Auto-generated method stub
    
         String str = "abc";   //这是一个String类
         
         Class cla1 = str.getClass();   //通过Java类所产生的对象获取
        
         Class cla2 = String.class;     //通过类名获取
        
         Class cla3 = Class.forName("java.lang.String");   //通过Class类中的静态方法获取
         
       
         System.out.println(cla1 == cla2);
       
         System.out.println(cla1 == cla3);
       
         //打印结果都为true,可见当一个类被创建后系统会首先在内存中找对应的字节码,
       
         //要是已经有的话就直接加载,没有的话才会创建一个,之后便直接引用该字节码。
 }
}

     总结:我们平时写的Java类都是Class类的一个实例化对象,即为一段字节码。而在java中已经含有9个实例化对象,即在内存中已经存在着9个java类的字节码,我们可以直接引用。那就是八大基本数据类型(int、float、double、shot、long、char、boolean、byte)和void类。只要在源程序中出现的类型,都有各自的Class实例化对象,例如int[]、String、void......

        一个Java类中有很多成分:成员变量、方法、修饰符等等,而反射就是将Java类中的各个成分映射为相应的java类。

你可能感兴趣的:(字节码,反射,class类)