首先说下反射是什么?反射是Sun公司推出的一组API,此组API位于Java.lang.reflect中

反射的作用是编写工具(例如eclipse),编写框架,当然对于一般的程序,我们不可能用反射来做这些事,一般反射大多是用于在构建类的实例以及调用类方法及属性。

ok! 了解了反射是什么以及反射的应用领域,那么就来看看Java中是怎么实现反射的吧

Student类

public class Student {
public String name;
public String gender;
public int age; public Student(){ } }

使用反射获取类的实例

public class Test {
public static void main(String[] args)throws ReflectiveOperationException {
//通过三种方式获取类的类对象
Class<?> c=Student.class;
Class<?> c1=new Student().getClass();
Class<?> c2=Class.forName("Student");//通过包名.类名获取类对象(因为该类在default包,所以可以不写包名)
//通过类对象来构建student实例,效果和new Student()一样,要求Student中必须要有无参的构造函数
Student s=(Student) c.newInstance();
Student s1=(Student) c1.newInstance();
Student s2=(Student) c2.newInstance(); s.age=1;
s1.age=2;
s2.age=3; System.out.println(s.age);
System.out.println(s1.age);
System.out.println(s2.age);
}

可以看到,正确的输出了1,2,3

通过反射获取类的属性及方法,动态执行

Student类型

public class Student {
public String name;
private int age;//该属性为私有,可以通过反射获取得到 public Student(){ } public int add(int a,int b){
return a+b;
} @Override
public String toString() {
// TODO Auto-generated method stub
return "name="+name+"\nage="+age;
} }

动态的给类的属性赋值和调用类的方法

public class Test {
public static void main(String[] args)throws ReflectiveOperationException {
//获取类对象
Class<?> c=Class.forName("Student"); //获取类的属性对象,需要填写属性对象的名称
Field f1=c.getField("name");//只能获取public的对象
Field f2=c.getDeclaredField("age");//可以获取到private的对象,这很吊吧 f2.setAccessible(true);//如果属性是私有的,那么就需要设置可访问
Student s1=(Student) c.newInstance();
//为属性对象赋值
f1.set(s1, "张三");
f2.set(s1, 22); System.out.println(s1.toString()); //通过类对象获取类的方法
Method m1=c.getMethod("add", int.class,int.class); //动态的执行方法
int sum=(int) m1.invoke(s1, 1,2);
System.out.println(sum); } }

java 通过反射获取调用类方法及属性的更多相关文章

  1. java通过反射获取调用变量以及方法

    一:反射概念 可以通过Class类获取某个类的成员变量以及方法,并且调用之. 二:通过反射获取方法.变量.构造方法 @Test // 通过反射获取类定义的方法 public void testMeth ...

  2. java 通过反射获取和设置对象属性值

    public static Object parseDate(Object object){ SimpleDateFormat sdf = new SimpleDateFormat("yyy ...

  3. java利用反射获取类的属性及类型

    java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...

  4. java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值

    1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ...

  5. java 通过反射获取类属性结构,类方法,类父类及其泛型,类,接口和包

    首先自定义三个类 package reflection1; public interface MtInterface { void info(); } package reflection1; imp ...

  6. java利用反射获取对象前后修改的内容(用于日志记录)

    import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

  7. java通过反射获取私有的构造方法,及反射擦除泛型数据类型约束

    /* * 反射获取私有的构造方法运行 * 不推荐,破坏了程序的安全性,封装性 * 暴力私有 */ public class ReflectDemo4 { public static void main ...

  8. java 通过反射机制调用某个类的方法

    package net.xsoftlab.baike; import java.lang.reflect.Method; public class TestReflect {     public s ...

  9. 使用反射获取类中的属性(可用于动态返回PO类的列,当做表格的表头)

    //利用反射取类中的属性字段 try { Class clazz = Class.forName("houji.bean.model.TaskModel"); Field[] fi ...

随机推荐

  1. web前端之HTML的前世今生

    一个尖括号   < 一个尖括号能干什么    < ? 你可以编出一顶帽子  <(:-p 或一张笑脸    :-> 或诉说一份爱   <3 或者更直接一些 <!DOC ...

  2. Js零散知识点笔记

    1.将类数组对象转换为数组 ES5: var arrLike = document.querySelectorAll('span'); var arr = Array.prototype.slice. ...

  3. adnroid 监听软键盘的显隐

    首先注明出处,我只是想做个笔记:http://www.jb51.net/article/64820.htm 第一眼看到的时候,觉得不太可靠,因为之前都是看到这样处理的,根据监听一个根布局的size,可 ...

  4. [HIHO1393]网络流三·二分图多重匹配

    题目链接:http://hihocoder.com/problemset/problem/1393 把项目到汇点的边权值都加起来,跑完最大流后看是否最大流=权值和.如果等于权值和说明所有项目都有足够的 ...

  5. 看守所、戒毒所3D指纹门禁系统解决方案

    为响应"科技强警"的战略方针,华本构建了一个完整的.集成的.可靠的.易操作的高安全性门禁系统,应用于看守所.戒毒所.公安局和部队等单位,使管理更现代化.规范化,有效地预防和制止越狱 ...

  6. Mifare系列5-存储结构(转)

    文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38081521 Mifare S50把1K字节的容量分为16个扇区(Sector0 ...

  7. winform 记住密码功能

      //登录        private void btn_Login_Click(object sender, EventArgs e)        {            //记住密码    ...

  8. /etc/ethers【地址映射】

    该文件存放硬件地址和 IP 地址的映射关系. 格式如下: 00-00-00-00-00-00 0:0:0:0 每一行代表一个 IP 地址.

  9. TCP/IP协议学习(四) 基于C# Socket的Web服务器---静态资源处理

    目录 1. C# Socket通讯 2. HTTP 解析引擎 3. 资源读取和返回 4. 服务器测试和代码下载 Web服务器是Web资源的宿主,它需要处理用户端浏览器的请求,并指定对应的Web资源返回 ...

  10. golang 管道

    2.管道简介Golang的原子并发特性使得它很容易构造流数据管道,这使得Golang可有效的使用I/O和多CPU特性.本文提出一些关于管道的示例,在这个过程中突出了操作失败的微妙之处和介绍处理失败的具 ...