java-通过反射获取目标类的属性,方法,构造器
首先定义一个urse
package com.studay_fanshe; public class User {
private String uname;
private int age;
private int id; public User() {
} public User(String uname, int age, int id) {
this.uname = uname;
this.age = age;
this.id = id;
} public String getUname() {
return uname;
}
public void setUname(){
this.uname="七月";
}
public void setUname(String uname) {
this.uname = uname;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
}
}
package com.studay_fanshe; import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method; public class test01 {
public static void main(String[] args) throws Exception{ Class clazz = Class.forName("com.studay_fanshe.User");
//获取名字
String name = clazz.getName();//获取包名+类名:com.studay_fanshe.User
System.out.println(name);
String simpleName = clazz.getSimpleName();//获取类名:User
System.out.println(simpleName);
//获取属性
Field[] fields = clazz.getFields();//获取所有的公共的public修饰的属性
System.out.println(fields.length);
Field[] f = clazz.getDeclaredFields();//获取全部的属性包括私有的
for (Field field : f) {
/* private java.lang.String com.studay_fanshe.User.uname
private int com.studay_fanshe.User.age
private int com.studay_fanshe.User.id*/
System.out.println(field);
}
//获取指定属性名的属性:private java.lang.String com.studay_fanshe.User.uname
Field uname = clazz.getDeclaredField("uname");
System.out.println(uname);
//获取方法
Method[] methods = clazz.getMethods();//获取指定类中所有的方法
for (Method method : methods) {
System.out.println("所有的方法:"+method);
}
//获取指定类中公有的方法
Method[] m = clazz.getDeclaredMethods();
for (Method method : m) {
System.out.println("public公有的方法"+method);
}
System.out.println("--------------------------------------------");
/* public void setUname(String uname) {
this.uname = uname;
}*/
//有参数类型必须传入参数类型对应的class对象
Method setUname = clazz.getDeclaredMethod("setUname", String.class);
System.out.println(setUname);
/* public void setUname(){
this.uname="七月";
}*/
//没有参数类型那么参2我们就写null
Method setUname1 = clazz.getDeclaredMethod("setUname", null);
System.out.println(setUname1);
//获得构造器
Constructor[] dc = clazz.getDeclaredConstructors();
for (Constructor constructor : dc) {
System.out.println("构造器:"+constructor);
}
Constructor dec = clazz.getDeclaredConstructor(String.class, int.class, int.class);
System.out.println("指定的构造器:"+dec);
}
}
java-通过反射获取目标类的属性,方法,构造器的更多相关文章
- java 通过反射获取调用类方法及属性
首先说下反射是什么?反射是Sun公司推出的一组API,此组API位于Java.lang.reflect中 反射的作用是编写工具(例如eclipse),编写框架,当然对于一般的程序,我们不可能用反射来做 ...
- java 通过反射获取和设置对象属性值
public static Object parseDate(Object object){ SimpleDateFormat sdf = new SimpleDateFormat("yyy ...
- java利用反射获取类的属性及类型
java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...
- java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。
首先先说一下类的加载,流程.只有明确了类这个对象的存在才可以更好的理解反射的原因,以及反射的机制. 一. 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三 ...
- Java实现通过反射获取指定类的所有信息
package com.ljy; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.l ...
- java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值
1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ...
- java中循环遍历实体类的属性和数据类型以及属性值
package com.walkerjava.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTarg ...
- java中如何遍历实体类的属性和数据类型以及属性值
package com.walkerjava.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTa ...
- org.reflections 接口通过反射获取实现类源码研究
org.reflections 接口通过反射获取实现类源码研究 版本 org.reflections reflections 0.9.12 Reflections通过扫描classpath,索引元数据 ...
随机推荐
- 深入理解 C 指针阅读笔记 -- 第六章
Chapter6.h #ifndef __CHAPTER_6_ #define __CHAPTER_6_ /*<深入理解C指针>学习笔记 -- 第六章*/ typedef struct _ ...
- [Angular] Communicate Between Components Using Angular Dependency Injection
Allow more than one child component of the same type. Allow child components to be placed within the ...
- 熊猫猪新系统測试之二:Mac OS X 10.10 优胜美地
在第一篇windows 10技术预览版測试之后.本猫为大家呈现还有一个刚刚才更新的mac操作系统:"优胜美地".苹果相同一改以猫科动物为代号命名的传统.在10.9的Maverick ...
- Android 项目导入常见错误
1.SDK版本号不正确应,你能够打开你项目中的project.properties文件,改动target=android-18(我这是18) ,将18改 为14(其它都能够),再改回18会又一次载入. ...
- Eclipse导入项目: No projects are found to import
Eclipse导入项目: No projects are found to import 如果发导入工程import的时候,出现”No projects are found to import” 的 ...
- 3.2.1 配置构建Angular应用——简单的笔记存储应用——编辑功能
本节我们会接着上节课的内容,继续来完成使用Angular来创建简单的笔记存储应用,上一节课,我们完成了笔记的展示功能,本节课,我们来完成编辑功能. 编辑主要是两个功能:编辑现有的笔记以及创建新笔记.首 ...
- 欧莱雅浅谈OC中方法调用的顺序中的Category
OC特有的分类Category,依赖于类.它可以在不改变原来的类内容的基础上,为类增加一些方法.分类的使用注意: (1)分类只能增加方法,不能增加成员变量: (2)在分类方法的实现中可以访问原来类中的 ...
- nhibernate的关系
用nhibernate,觉得比较难把握的是其中表间的关系. 我用的是Fluently Nhibernate,直接用代码,而不是XML来书写代码与数据表的映射.其中表间关系有3种: 1.Referenc ...
- springMVC中的中心控制Servlet是那个类?(B)
A:ActionServlet B:DispatcherServlet C:AbstractController D:FacesServlet
- Ubuntu grub2的启动配置文件grub.cfg,为了修改另人生厌的时间
文章转自http://hi.baidu.com/detax/blog/item/90f18b54a8ef5253d00906e4.html 升级到Ubuntu 9.10后,就要接触grub2了,它和以 ...