java通过反射调类中的某个方法和获得类中的元素。
来源:互联网 发布:仿淘宝 下拉刷新 编辑:程序博客网 时间:2024/06/08 13:36
使用java的反射机制获得类中的方法并执行方法:
执行某个方法:
实体类:
package com.xy.user;/* * description 实体类 */public class Users {private String userName;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}}测试类:
package com.xy.user;public class Test { public static void main(String[] args) throws Exception { Test test = new Test(); Users user = new Users(); test.execute(user, "com.xy.user.Users", "setUserName", "许阳"); System.out.println(user.getUserName()); } public void execute(Object obj, String className, String methodName, String paramerValue) throws Exception { /* * 首先根据完整的包名+类名获得类的Class,不是class * Class就是类的类,用来描述某个类有那些字段,方法,构造器等。 * 这样也可以获得实体类,即参数中的invoke参数中的obj: * Users user =(Users)Class.forName("com.xy.user.Users").newInstance(); * 也可以这样获得Class:Users user = new Users(); Class cls = user.getClass(); */ Class cls = Class.forName(className); /* * 获得到class,class的getMethod(方法名,参数类型)可获得class中的某方法. * 一个class可能有多个名字一样,参数不同的方法,所以要用方法名和参数类型来获得。 * 如果有多个参数,使用cls.getMethod(methodName, new Class[] { int.class,String.class }) */ Method method = cls.getMethod(methodName, String.class); //通过反射执行方法。invoke(类,参数值); method.invoke(obj, paramerValue); }}运行结果:
许阳
例子:
package com.xy.reflect;import java.lang.reflect.*; public class Test { public String name; private int age=25; String password; public static void main(String [] args) throws Exception{ Test obj = new Test(); Class cls = obj.getClass(); Field[] fields = cls.getDeclaredFields(); for(Field f : fields){ System.out.println("name :" + f.getName()); System.out.println("type :" + f.getType().getName()); System.out.println("class :" + f.getDeclaringClass()); System.out.println("value :" + f.get(obj)); int mod = f.getModifiers(); System.out.println("modifiers :"+ Modifier.toString(mod)); System.out.println("------------------------"); } }}执行的结果:
name :name
type :java.lang.String
class :class com.xy.reflect.Test
value :null
modifiers :public
------------------------
name :age
type :int
class :class com.xy.reflect.Test
value :25
modifiers :private
------------------------
name :password
type :java.lang.String
class :class com.xy.reflect.Test
value :null
modifiers :
------------------------
备注:
Field(method)的getModifiers()方法返回int类型值表示该字段的修饰符。其中,该修饰符是java.lang.reflect.Modifier的静态属性。
对应表如下:
PUBLIC: 1 PRIVATE: 2 PROTECTED: 4 STATIC: 8
FINAL: 16 SYNCHRONIZED: 32 VOLATILE: 64 TRANSIENT: 128
NATIVE: 256 INTERFACE: 512 ABSTRACT: 1024 STRICT: 2048
可以通过Modifier.toString(int mod)得到对应的修饰符;
通过反射获得类中的元素:
获得本类中的元素:
获得变量:
Class cl = 类名.class;Field[] fs = cl.getField();//得到公用的变量(public)Field[] fs1 = cl.getDeclaredField();//得到所有的变量(public private protect)
获得方法:
Class cl = 类名.class;Method[] mt = cl.getMethod();//得到公共的方法(包括继承来的)Method[] mt1 = cl.getDeclaredField();//得到所有的方法(不包括继承来的)
获得构造方法:
Class cl = 类名.class;Constructor[] con = cl.getConstructor();//得到公共的构造函数(public)Constructor[] con1 = cl.getDeclaredConstructor();//得到所有的构造函数(public,private,protect)
获得包名+类名:
Class cls = Test.class;System.out.println(cls.getName());
获得方法返回值类型和参数类型:
Class cls = Class.forName("com.xy.Test");Method[] med = cls.getMethods();for(Method m :med){//得到返回值类型Class returnType = m.getReturnType();//得到参数类型,一个方法可能有多个参数Class paraType[] = m.getParameterTypes();}
获得类加载器:
Class cls = Class.forName("com.xy.Test");cls.getClassLoader().getClass().getName();
获得其他类的元素:
获得接口:
Class cls = Class.forName("com.xy.Test");Class<?> inter = cls.getInterfaces();
获得父类:
Class cls = Class.forName("com.xy.Test");Class<?> superClass = cls.getSuperclass();
其他:
获得Class的3种方式:
Class cls = Class.forName("com.xy.Test");Class cls1 = Test.class;Class cls2 = new Test().getClass();
通过Class反向得到类的实例:
Class cls = Class.forName("com.xy.Test");Test test = (Test)cls.newInstance();
0 0
- java通过反射调类中的某个方法和获得类中的元素。
- 通过反射机制获得某个类中的属性,构造方法,方法
- Java泛型 通过反射获得方法参数中的变量类名和泛型
- 利用JAVA中的反射机制获得某个类的信息
- java 通过反射获得类的属性和调用方法
- 通过反射调类中的private方法
- 黑马程序员-Java反射--用反射方式执行某个类中的main方法
- 通过JAVA的反射调用类中的公有私有方法
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- 通过反射调用类中的方法
- 通过反射调用类中的方法
- 通过反射调用其他类中的方法
- java语言,通过反射获得类中的字段,及对应值。
- Java反射获取父类中的元素
- java通过反射获得当前运行的类名和方法名
- java基础之通过反射获得和使用类的字段、方法、构造器,等
- 题目1197:奇偶校验
- 【面试】联合体内存表示
- 9.选择排序——堆排序
- 线性代数的疑惑
- 数据结构学习笔记8 树 课后习题
- java通过反射调类中的某个方法和获得类中的元素。
- 每一位Android开发者应该知道的Android体系架构和开发库(转)
- JVM 性能优化
- BSP 和设备驱动开发指南
- 汤姆大叔的博客
- 关于jsp中加载css、js失败
- UVa 10026 - Shoemaker's Problem
- XDoInsist项目开发全程记录
- ADO.NET 中 SQL 语句的拼接