反射(一) Reflection - 获取类的属性&方法
2017-05-15 00:15
405 查看
语法
// 加载类到内存中 Class<?> clazz = Class.forName("com.duoduo.User");
加载类完成之后,在堆内存中,就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象包含了类的所有信息,我们可以通过这个对象看到类的所有结构。
反射:这个对象就像一面镜子,透过这个镜子可以看到类的结构。
实体类
package com.duoduo; import com.annotation.Column; import com.annotation.Table; /** * @author Duoduo * @version 1.0 * @date 2017/5/13 10:33 */ @Table(name = "User") public class User { @Column(name = "userName") private String userName; private String password; public int age; public User() { } public User(String userName) { this.userName = userName; } public User(String userName, String password, int age) { this.userName = userName; this.password = password; this.age = age; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "userName='" + userName + '\'' + ", password='" + password + '\'' + ", age=" + age + '}'; } }
反射测试类
package com.duoduo.reflection;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* @author Duoduo
* @version 1.0
* @date 2017/5/14 22:53
*/
public class Demo1 {
public static void main(String[] args){
try {
// 加载类到内存中 Class<?> clazz = Class.forName("com.duoduo.User");
//获取报名+类名
System.out.println(clazz.getName());
//获取类名
System.out.println(clazz.getSimpleName());
//获取public属性
Field[] publicFileds = clazz.getFields();
System.out.println(publicFileds.length);
for (Field field: publicFileds){
System.out.println(field.getName());
}
System.out.println("********* 获取所有的属性字段 **************");
Field[] fields = clazz.getDeclaredFields();
for (Field field:fields){
System.out.println("----------------------------");
System.out.println("属性 : "+field);
Annotation[] annotations = field.getAnnotations();
for ( Annotation annotation:annotations){
System.out.println("注解 : "+ annotation.toString());
}
}
System.out.println("********* 获取所有的方法 **************");
Method[] methods = clazz.getDeclaredMethods();
for (Method method: methods){
System.out.println(method);
}
//如果方法有参数,则必须传递参数对应的class对象
Method setMethod = clazz.getDeclaredMethod("setPassword", String.class);
System.out.println(setMethod);
System.out.println("********* 获取所有的构造器 **************");
Constructor[] constructors = clazz.getDeclaredConstructors();
for (Constructor constructor:constructors){
System.out.println(constructor);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试结果
********* 获取报名+类名 ************** com.duoduo.User 类名 : User ********* 获取public属性 ************** age ********* 获取所有的属性字段 ************** ---------------------------- 属性 : private java.lang.String com.duoduo.User.userName 注解 : @com.annotation.Column(name=userName) ---------------------------- 属性 : private java.lang.String com.duoduo.User.password ---------------------------- 属性 : public int com.duoduo.User.age ********* 获取所有的方法 ************** public java.lang.String com.duoduo.User.toString() public void com.duoduo.User.setAge(int) public void com.duoduo.User.setUserName(java.lang.String) public int com.duoduo.User.getAge() public void com.duoduo.User.setPassword(java.lang.String) public java.lang.String com.duoduo.User.getUserName() public java.lang.String com.duoduo.User.getPassword() public void com.duoduo.User.setPassword(java.lang.String) ********* 获取所有的构造器 ************** public com.duoduo.User(java.lang.String,java.lang.String,int) public com.duoduo.User(java.lang.String) public com.duoduo.User() Process finished with exit code 0
相关文章推荐
- 反射机制的概述和字节码对象的获取方式 JavaBean的概述&BeanUtils的使用 反射操作构造方法、成员方法、成员属性
- 测试 java反射Reflection中 获取 类属性、方法、构造方法及 调用类方法改变 对象属性
- 关于将RadioButtonList的AutoPostBack属性设置为"True"获取子项时候引起回发的问题解决方法
- Java利用反射来获取一个方法的 范型化参数 Vector<Integer>的类型
- 反射示例1-----执行反射dll的方法和获取属性的值
- java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- 获取类中[DisplayName("")]属性的方法
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- Java 使用反射获取类、方法、属性上的注释
- 用反射的方式获取父类中的所有属性和方法
- java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(1)
- C#反射新建类实例和调用类方法及属性帮助类 以及获取或设置对象属性中字段值帮助类
- [ios]objective-c 反射获取类的属性的方法
- 利用反射获取类的方法及属性
- 通过反射获取类的所有属性和方法
- C#反射实例——获取及设置对象属性,运行对象方法
- Java中用反射的方式获取类中的所有属性和方法,以及获取属性的默认值,设置属性的默认值
- java内省(同反射)获取属性的getter\setter方法等
- Java内存理解 && 反射访问私有属性或方法