Java反射方法,主要有无参、带参、返回值、私有、静态等区别。
Person类:
1 public class Person { 2 3 private String name = "默认"; 4 private int age = 0; 5 6 public Person(){ 7 8 } 9 10 public int getAge() { 11 System.out.println(age); 12 return age; 13 } 14 15 public Class[] fun1(String name,int[] age){ 16 System.out.println(name+"--"+age[0]); 17 return new Class[]{String.class}; 18 } 19 20 private void fun2(InputStream in){ 21 System.out.println(in); 22 } 23 24 public static void fun3(int age){ 25 System.out.println(age); 26 } 27 }
反射方法:
1 //反射类方法 2 public class Fun { 3 4 //void getAge() 无参 5 @Test 6 public void test1() throws Exception{ 7 Class clazz = Class.forName("cn.me.Person"); 8 Method m = clazz.getMethod("getAge", null); 9 10 Person p = new Person(); 11 //传入对象,是哪个对象的方法 12 m.invoke(p, null); 13 //0 14 } 15 16 //Class[] fun2(String,int[]) 带参,有返回值 17 @Test 18 public void test2() throws Exception{ 19 Class clazz = Class.forName("cn.me.Person"); 20 Method m = clazz.getMethod("fun1", String.class,int[].class); 21 22 Person p = new Person(); 23 //填充并返回 24 Class cla[] = (Class[]) m.invoke(p, "ske",new int[]{1,2}); 25 System.out.println(cla[0]); 26 //ske--1 27 //class java.lang.String 28 } 29 30 //private fun2(InputStream) 31 @Test 32 public void test3() throws Exception{ 33 Class clazz = Class.forName("cn.me.Person"); 34 Method m = clazz.getDeclaredMethod("fun2", InputStream.class); 35 //暴力反射 36 m.setAccessible(true); 37 Person p = new Person(); 38 m.invoke(p, new FileInputStream("1.txt")); 39 //java.io.FileInputStream@1f2e8e93 40 } 41 42 //static fun3(int) 43 @Test 44 public void test4() throws Exception{ 45 Class clazz = Class.forName("cn.me.Person"); 46 Method m = clazz.getMethod("fun3", int.class); 47 m.invoke(null, 12); 48 //静态函数可以不要对象 49 //Person p = new Person(); 50 //m.invoke(p, 12); 51 //12 52 } 53 }