一句话总结反射:反射就是将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);
} }