Java 反射 调用 demo

基础类.供demo反射练习

 1 package fanshe;
 2
 3 public class Person {
 4     public String name;
 5     private String age;
 6     private int p;
 7     public Person() {};
 8     public Person(String name, String age) {
 9         super();
10         this.name = name;
11         this.age = age;
12     }
13     private Person(String name, String age,int p) {
14         super();
15         this.name = name;
16         this.age = age;
17         this.p = p;
18     }
19     public String getName() {
20         return name;
21     }
22     @Override
23     public String toString() {
24         return "Person [name=" + name + ", age=" + age + "]" + "p -"+ p;
25     }
26     public void setName(String name) {
27         this.name = name;
28     }
29     public String getAge() {
30         return age;
31     }
32     public void setAge(String age) {
33         this.age = age;
34     }
35 }

反射demo类

 1 package fanshe;
 2
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.Field;
 5 import java.lang.reflect.InvocationTargetException;
 6 import java.lang.reflect.Method;
 7
 8 public class demo1 {
 9
10     public static void main(String[] args) {
11         // TODO Auto-generated method stub
12         try {
13             d_3();
14         } catch (Exception e) {
15             // TODO: handle exception
16             e.printStackTrace();
17         }
18     }
19
20     private static void d_1() {
21         Person p = new Person();
22         Class  c = p.getClass();
23
24     }
25
26     private static void d_2() {
27         Class  c =  Person.class;
28           System.out.println(c);
29     }
30     private static void d_3() throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
31         Class  c = Class.forName("fanshe.Person");
32
33         //--------------------------//
34         Constructor con = c.getConstructor(); //获得 空参数的构造器 public
35         Object o= con.newInstance(); //运行获取到的构造方法
36         System.out.println(o.toString());
37
38         //--------------------------//
39         Constructor con2 = c.getConstructor(String.class,String.class); //获得带有参数的构造方法 public
40         Object o2 = (Person)con2.newInstance("a","22");
41         System.out.println(o2.toString());
42
43         //--------------------------//
44
45         Constructor con3 = c.getDeclaredConstructor(String.class,String.class,int.class); //获得带有参数的构造方法 private
46         con3.setAccessible(true);
47         Object o3 = (Person)con3.newInstance("a","22",14);
48         System.out.println(o3.toString());
49
50         //--------------------------//
51         Object tmp_obj = c.newInstance();
52         Field f_name = c.getField("name");//获得成员变量 public
53         f_name.set(tmp_obj, "abc"); //设置变量
54         System.out.println(tmp_obj);
55
56         //--------------------------//
57         Field f_age = c.getDeclaredField("age");//获得成员变量 public
58         System.out.println(f_age);
59
60         //--------------------------//
61         Method m_getName = c.getMethod("getName"); //获得类函数无参数 public
62         Object o1 = m_getName.invoke(tmp_obj); //运行getName方法.返回值 反给obj
63         System.out.println(o1);
64
65         //--------------------------//
66         Method m_setName = c.getMethod("setName",String.class);
67         m_setName.invoke(tmp_obj,"abcdqweqwe");
68         System.out.println(tmp_obj.toString());
69     }
70 }

通过反射.绕开泛型

1 ArrayList<String> arr = new ArrayList<String>();
2 arr.add("a");
3 Class carr = arr.getClass();
4 Method arr_add = carr.getMethod("add",Object.class);
5 arr_add.invoke(arr, 1);
6 arr_add.invoke(arr, 2);
7 arr_add.invoke(arr, 3);
8 arr_add.invoke(arr, 4);
9 System.out.println(arr);
时间: 2024-11-01 00:41:27

Java 反射 调用 demo的相关文章

java反射调用方法

1:Class类中的方法 public Method getDeclaredMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException 参数: name - 方法名 parameterTypes - 参数数组 返回: 该类与指定名和参数相匹配的方法的 Method 对象 2:Method类中的方法; public Object invoke(Object obj,

Java 反射调用私有域和方法(setAccessible)

Java 反射调用私有域和方法(setAccessible) @author ixenos AccessibleObject类 Method.Field和Constructor类共同继承了AccessibleObject类,该基类有两个setAccessible方法能在运行时压制Java语言访问控制检查(Java language access control checks),从而能任意调用被私有化保护的方法.域和构造方法 public class AccessibleObjectextends

Java反射机制demo(四)—获取一个类的父类和实现的接口

Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 Object 类.一个接口.一个基本类型或 void,则返回 null.如果此对象表示一个数组类,则返回表示该 Object 类的 Class 对象. 测试代码: package com.aaron.reflect; public class Demo4 { public static void

java黑魔法-反射机制-02-通过Java反射调用其他类方法

package com.aaron.reflect; import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; /** * Created by IntelliJ IDEA. * File: TestRef.java * User: leizhimin * Date: 2008-1-28 14:48:44 */ public class TestRef { //直接 foo.outIn

java 反射机制 Demo 练习

最近在研究java 反射机制,看网上视频,并抄了下来研究,用到Servlet 注解,绝不亚于SpringMVC 的注解使用,特此记录分享,Servlet 再也不用为传递参数而判断担忧了,专注业务! 1. 首先定义一个父类,所有的业务操作全部继承之. 1 package controller; 2 3 import java.io.IOException; 4 import java.lang.reflect.Method; 5 6 import javax.servlet.ServletExce

Java反射调用多种类型的方法总结

最近一直在搞Java中的反射,遇到了小问题,所以总结下反射时调用方法需要注意的事项以及各种例子. 本例主要实现的功能有 * 1.没有参数的方法 * 2.一个参数的方法,没有返回值的方法 * 3.多个参数的方法 * 4.参数为数组的方法 * 5.参数为集合的方法 * 6.返回值为数组的方法 下面直接来例子 package com.mine.practice.reflectMethod; import java.lang.reflect.InvocationTargetException; impo

java反射调用某个对象的方法

// 反射调用某个对象的方法 public Object invokeMethod(Object methodObject, String methodName, Object[] args) throws Exception { Class ownerClass = methodObject.getClass(); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) {

Java反射机制demo(五)—获得并调用一个类中的方法

这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和运行结果.获取所有的方法使用Class类中getMethos()方法. 待获取的类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 package

java 反射调用支付SDK

在android开发中会遇到各种SDK的接入,很是麻烦.最初在想能不能把所有的SDK都 融合到一个当中,发现有点异想天开.但是也可以解决SDK资源不小心没有引入,导致程序调用接口崩溃问题.经过查资料,还是写了一个小Demo,仅供参 考!很早之前写的了,估计移动基地SDK,有变动,不过道理是一样的. 仅以移动基地SDK举例. 1.移动支付需要的SO文件导入 public class CarrotApplication extends Application { //是否含有移动支付SDK bool