首先说下反射是什么?反射是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. CentOS 7 程序自启动的问题

    Mysql具体的安装方法见http://www.cnblogs.com/yoyotl/p/5752437.html 但是关于自启动部分需要多一些说明. 一.问题现象: 系统重启后,发现mysqld服务 ...

  2. jQuery EasyUI教程之datagrid应用(二)

    上次写到了让数据库数据在网页datagrid显示,我们只是单纯的实现了显示,仔细看的话显示的信息并没有达到我们理想的效果,这里我们丰富一下: 上次显示的结果是这样的 点击查看上篇:jQuery Eas ...

  3. Try to write a script to send e-mail but failed

    #-*-coding: utf-8 -*- '''使用Python去发送邮件但是不成功,运行后,等待一段时间, 返回[Errno 10060] A connection attempt failed ...

  4. java.lang.InstantiationException-反射机制

    package com.test.classtest; public class test { public static void main(String[] args) throws Except ...

  5. 将JSON对象带有格式的写出到文件中

    需求:将一个JSON对象写出到文件中,要求文件中的JSON数据带有简单的格式.代码的实现参考了Java算法中的栈处理括号匹配问题.好了,不多说了,下面是代码的实现. 代码: package gemu. ...

  6. (原创)Windows系统后安装ubuntu,无法选择启动ubuntu。

    继Window系统之后,安装Ubuntu系统. 问题:启动没有Grub的ubuntu启动项. 查看:/boot/grub/中只有txt和env,内容空白,grub没有设置好. 修复: sudo fdi ...

  7. iOS 调试问题汇总

    // PBXcp error修复-No such file or directory (2013-05-02 15:20:50) 差不多算是Xcode比较常见的一个编译错误了,原因往往是添加或删除美术 ...

  8. MySQL存储IP地址操作

    数据库数据表创建语法: DROP TABLE IF EXISTS `admin`; CREATE TABLE IF NOT EXISTS `admin`( `adminid` INT UNSIGNED ...

  9. python——django使用mysql数据库(一)

    之前已经写过如何创建一个django项目,现在我们已经有了一个小骷髅,要想这个web工程变成一个有血有肉的人,我们还需要做很多操作.现在就先来介绍如何在django中使用mysql数据库. 前提:已经 ...

  10. 总结oninput、onchange与onpropertychange事件的用法和区别,onchange

    前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onke ...