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,索引元数据 ...
随机推荐
- Java子类重写父类方法注意问题收集(转)
子类不能重写父类的静态方法,私有方法.即使你看到子类中存在貌似是重写的父类的静态方法或者私有方法,编译是没有问题的,但那其实是你重新又定义的方法,不是重写.具体有关重写父类方法的规则如下: 重写规则之 ...
- MySQL错误日志、binlog日志、查询日志、慢查询日志简介
1.数据库的日志是帮助数据库管理员,追踪分析数据库曾经发生的各种事件的有力依据,mysql中提供了错误日志.binlog日志(二进制日志).查处日志.慢查询日志.在此,我力求解决以下问题:各个日志的作 ...
- C# 获得图片的分辨率和大小
double DPI = pictureBox1.Image.HorizontalResolution;//获得分辨率 gisoracle double w = 1.0 * pictureBox1.I ...
- .NET作品集:基于svn 的.net 持续集成工具
作品背景 这个.net 持续集成作品还是在2014年的时候从事.net 软件项目开发的时候做的,当时部门还用着vs2008用vb.net做项目(现在也是),项目代码极混乱,版本工具用的vss,而且用的 ...
- Meteor第一个应用程序
这一个小教程将教你如何建立你的第一个 Meteor 应用程序. 步骤 1 - 创建App 要创建应用程序,我们将从命令提示符窗口运行 meteor create 命令.该应用程序的名称是 meteor ...
- windows下开发PHP扩展dll(无需Cygwin)
windows下开发php扩展网上很多资料都说需要Cygwin,其实完全可以不必安装该东东.没错,是可以在linux下生成骨架后拷到windos下来用,但是,如果没有linux环境呢?什么,装虚拟机? ...
- linux 下的特殊文件 /dev/null 和 /de/zero
生成一个100Mb的文件 : time dd of=2Gb.file if=/dev/zero bs=1024 count=100000 ubuntu 下测试磁盘的读写性能: 测试写: time d ...
- JVM原理及内存溢出
JVM原理及内存溢出
- 创立一个站点的前前后后(起因,域名,云平台,备案,CDN等等)(1)
起因 写完<完美软件开发:方法与逻辑>这书后,原本想继续写书的,可出来參加了些社区活动后,我发现我写的书大家评价还行.但事实上不太理解.而接下来想写的书更加抽象点.准备叫<管理的解析 ...
- 负载均衡之基于DNS负载
基于DNS的负载平衡 OK,在了解了负载平衡系统的大致组成及使用方式之后.我们就来看看各种负载解决方式. 当前业界中所最常使用的负载平衡解决方式主要分为三种:基于DNS的负载平衡,L3/4负载平衡,也 ...