mikekee

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 }

 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-12-10
  • 2021-12-27
  • 2021-06-15
  • 2022-12-23
  • 2021-11-21
  • 2021-12-10
猜你喜欢
  • 2021-07-27
  • 2021-12-10
  • 2021-10-03
  • 2022-03-02
  • 2021-12-10
  • 2021-12-10
  • 2022-12-23
相关资源
相似解决方案