反射
1 package cn.hello; 2 3 import java.util.Arrays; 4 5 /*反射 6 * 7 * Class类: 8 * 成员变量:Field 9 * 构造方法:Constructor 10 * 成员方法:Method 11 * 12 * 13 * 获取class文件对象的方式: 14 * A :Object类的getClass()方法 15 * B:数据类型的静态属性class 16 * C Class类中的静态方法 17 * */ 18 public class Test01 { 19 public static void main(String[] args) throws ClassNotFoundException { 20 //方式1 21 Student s=new Student(); 22 Class c=s.getClass(); 23 24 //方式2 25 Class c2=Student.class; 26 27 //方式3 28 Class c3=Class.forName("cn.hello.Student"); 29 System.out.println(c3==c); 30 } 31 }
1 package cn.hello; 2 3 import java.lang.reflect.Constructor; 4 import java.util.Arrays; 5 6 /* 7 * 通过反射获取构造方法并使用 8 * */ 9 public class Test01 { 10 public static void main(String[] args) throws Exception { 11 12 Class c=Class.forName("cn.hello.Student"); 13 14 //获取构造方法 15 //Constructor[] cons=c.getConstructors(); 16 Constructor[] cons=c.getDeclaredConstructors(); 17 for(Constructor con:cons){ 18 System.out.println(con); 19 } 20 Constructor con=c.getConstructor(); 21 System.out.println(con); 22 23 Constructor con2=c.getConstructor(String.class,int.class,String.class); 24 Object obj2=con2.newInstance("haha",22,"world"); 25 System.out.println(obj2); 26 27 Object obj=con.newInstance(); 28 System.out.println(obj); //Student [name=null, age=0, address=null] 29 30 } 31 }
1 package cn.hello; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 import java.util.Arrays; 6 7 /* 8 * 通过反射获取成员变量并使用 9 * */ 10 public class Test01 { 11 public static void main(String[] args) throws Exception { 12 13 Class c=Class.forName("cn.hello.Student"); 14 15 Constructor con=c.getConstructor(String.class,int.class,String.class); 16 17 Object obj=con.newInstance("hello",22,"word"); 18 System.out.println(obj); 19 20 //-------------------------------- 21 System.out.println("--------------------"); 22 23 Field addressField=c.getField("address"); 24 addressField.set(obj, "北京"); 25 System.out.println(obj); 26 System.out.println("----------"); 27 Field nameField=c.getDeclaredField("name"); 28 nameField.setAccessible(true); //name是private修饰的,所以要暴力访问 29 nameField.set(obj,"阿光"); 30 System.out.println(obj); 31 } 32 }
1 package cn.hello; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 import java.lang.reflect.Method; 6 import java.util.Arrays; 7 8 /* 9 * 通过反射获取成员方法并使用 10 * */ 11 public class Test01 { 12 public static void main(String[] args) throws Exception { 13 Class c=Class.forName("cn.hello.Student"); 14 15 //获取所有方法 16 /*Method[] methods=c.getMethods(); //获取自己的公共方法和父亲的公共方法 17 Method[] methods1=c.getDeclaredMethods(); //获取自己所有的方法 18 for(Method m:methods){ 19 System.out.println(m); 20 }*/ 21 22 //获取单个方法并使用 23 Constructor con=c.getConstructor(); 24 Object obj=con.newInstance(); 25 26 Method m1=c.getMethod("show"); 27 // public Object invoke(Object obj ,Object obj.....args) 返回值是Object接收,第一个参数表示对象是谁,第二个参数表示调用该方法的实际参数 28 m1.invoke(obj); 29 30 } 31 }
1 package cn.hello; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 import java.lang.reflect.Method; 6 import java.util.Arrays; 7 8 /* 9 * 通过反射获取成员方法并使用 10 * */ 11 public class Test01 { 12 public static void main(String[] args) throws Exception { 13 Class c=Class.forName("cn.hello.Student"); 14 15 //获取所有方法 16 /*Method[] methods=c.getMethods(); //获取自己的公共方法和父亲的公共方法 17 Method[] methods1=c.getDeclaredMethods(); //获取自己所有的方法 18 for(Method m:methods){ 19 System.out.println(m); 20 }*/ 21 22 //获取单个方法并使用 23 Constructor con=c.getConstructor(); 24 Object obj=con.newInstance(); 25 26 Method m1=c.getMethod("show"); 27 // public Object invoke(Object obj ,Object obj.....args) 返回值是Object接收,第一个参数表示对象是谁,第二个参数表示调用该方法的实际参数 28 m1.invoke(obj); 29 System.out.println("----------"); 30 Method m2=c.getMethod("method",String.class); 31 32 m2.invoke(obj, "hello"); 33 } 34 }
1 package cn.hello; 2 3 import java.io.FileReader; 4 import java.lang.reflect.Constructor; 5 import java.lang.reflect.Field; 6 import java.lang.reflect.Method; 7 import java.util.Arrays; 8 import java.util.Properties; 9 10 /* 11 * 通过配置文件 12 * */ 13 public class Test01 { 14 public static void main(String[] args) throws Exception { 15 //Class c=Class.forName("cn.hello.Student"); 16 17 //反射 18 //需要有配置文件配合使用 19 //加载配置文件 20 Properties prop=new Properties(); 21 FileReader fr=new FileReader("j:\\zf\\zf\\class.txt"); 22 prop.load(fr); 23 fr.close(); 24 //获取数据 25 String className=prop.getProperty("className"); 26 String methodName=prop.getProperty("methodName"); 27 28 //反射 29 Class c=Class.forName(className); 30 31 Constructor con=c.getConstructor(); 32 33 Object obj=con.newInstance(); 34 35 Method m=c.getMethod(methodName); 36 37 m.invoke(obj); 38 39 40 } 41 }
className=cn.hello.Person
methodName=love