------- 物联云培训、java培训、期待与您交流! ----------
1.Class
概述:实际上就是管理java类的,比如说管理人的用Person类,那么管理类的就是用的是Class类。
2.创建对象和使用
因为Class类中没有构造方法,不能创建对象,但是每一个java类都会产生一个字节码对象,它会将字节码对象赋给Class变量。例如:String,Math,Date等等这些类都会产生一个个的字节码,他们就对应着一个个的Class类对象,只要拿到的这些类的字节码就可以对这个类进行操作了。
拿到字节码有三种方式:
第一种:Class clazz=Class.forName(“java.lang.String”);
第二种:Class clazz=new String().getClass();
第三种:Class clazz=String.class.
3.预定义的Class
包括八种基本类型:
(byte、short、int、long、float、double、char、boolean)
的字节码对象和一种返回值为void类型的void.class。
4.基本数据类型的字节码都可以用与之对应的包装类中的TYPE常量表示
Integer.TYPE是Integer类的一个常量,它代表此包装类型包装的基本类型的字节码,所以和int.class是相等的。
假如有一个类为Person类。
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
importjava.lang.reflect.Method;
import java.util.Arrays;
public class ReflectTest {
/**
* @param args
*/
public static void main(String[] args)throws Exception {
// TODOAuto-generated method stub
Person person=new Person("lichaoaidaiwenjuan",100);
// Fieldfield=Class.forName("javaday01.Person").getField("name"); //反射一个成员变量
// System.out.println(field.get(person));
/*//反射有参的构造函数
*Constructor contructor=Class.forName("javaday01.Person").getConstructor(String.class,int.class);
Person s=(Person)contructor.newInstance("lisi",4);
//反射无参的构造函数
Constructorconstructor=Class.forName("javaday01.Person").getConstructor(null);
Personper=(Person)constructor.newInstance(null);*/
/*//反射一个有参的成员函数
*Methodmethod=Class.forName("javaday01.Person").getMethod("setName",String.class);
method.invoke(person, "daiwenjuanailichao");*/
/*//反射一个无参的成员函数
*Method method=Class.forName("javaday01.Person").getMethod("getName",null);
System.out.println((String)method.invoke(person,null));
*/
/*//反射全部成员函数
Method[]method=Class.forName("javaday01.Person").getMethods();
for(Method me:method){
if((String)me.getName()=="getName"){
System.out.println(me.invoke(person,null));
}
}*/
//Arraysarrays=Class.forName("javaday01.Person").get("number");
/*//反射全部成员变量
*Field[] field1=Class.forName("javaday01.Person").getFields();
for(Field f:field1){
System.out.print(f.getName()+":");
System.out.println(f.get(person));
}
*/
String str=args[0];
Method method=Class.forName("javaday01.inner").getMethod("main", String[].class);
method.invoke(null,(Object)new String[]{"daiwenjuan","ai","lichao"});
}
}
class inner{
public static void main(String[] args){
for(String str:args){
System.out.println(str);
}
}
}
总结:反射就是将类中各个部分变化成相应的类对象。