黑马程序员--java反射

一句话总结反射:反射就是将java类中的各种成分映射成相应的java类

 

int.class与Integet.TYPE一样,都是返回int的Class实例

Class类里的 isPrimitive()方法是判断这个Class对象是否是基本类型(只有在9中情况下返回true,int.class...等8中基本数据类型和void.class)

通过Class类实例,可以将类中的构造方法(Constructor),成员变量(Field),成员方法(Method),包(Package),注释(Annotation),类加载器(ClassLoader)

Class实例的三种定义方式:

String str  = "123";

Class c1 = Class.forName("java.lang.String");//这是最常用的,这样不用导入一个明确的类

Class c2 = str.getClass();

Class c3 = String.class;

这里的c1,c2,c3是相等的(既然是相等的,就不是new出来的,c1这些也是引用类型,不会存在栈中,所以他们应该存在常量池中(Class的对象对应内存中的字节码文件))

import java.lang.reflect.Constructor;

class Demo1{  

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

/*Class classString = Class.forName("java.lang.String");   

//Class classString = String.class;   

//Class class String  = new String().getClass();

  Constructor [] constructor = classString.getConstructors();   Constructor constructor1 = classString.getConstructor(String.class);

  System.out.println(constructor1);  

 for(Constructor c:constructor){    

System.out.println(c.getName());   

}*/  

 //获取String对象的方式:   

String str = null;   

//这里需要强制类型的转化,Class.forName("java.lang.String").newInstance()的   

//返回值是Object类型的   System.out.println(str);  

 //newInstance会自动初始化,不是null,难道是“”;   

String str2 = (String)Class.forName("java.lang.String").newInstance();   

System.out.println(str2);  

 Constructor constructor = String.class.getConstructor(String.class);   

//System.out.println(constructor.getName()+".....");   

String str3 = (String)constructor.newInstance(new String("123"));   

System.out.println(str3);

  

 } }

posted @ 2015-11-24 22:11  谢天航  阅读(141)  评论(0编辑  收藏  举报