java 通过反射获取调用类方法及属性
首先说下反射是什么?反射是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 通过反射获取调用类方法及属性的更多相关文章
- java通过反射获取调用变量以及方法
		一:反射概念 可以通过Class类获取某个类的成员变量以及方法,并且调用之. 二:通过反射获取方法.变量.构造方法 @Test // 通过反射获取类定义的方法 public void testMeth ... 
- 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利用反射机制判断对象的属性是否为空以及获取和设置该属性的值
		1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ... 
- java 通过反射获取类属性结构,类方法,类父类及其泛型,类,接口和包
		首先自定义三个类 package reflection1; public interface MtInterface { void info(); } package reflection1; imp ... 
- java利用反射获取对象前后修改的内容(用于日志记录)
		import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Metho ... 
- java通过反射获取私有的构造方法,及反射擦除泛型数据类型约束
		/* * 反射获取私有的构造方法运行 * 不推荐,破坏了程序的安全性,封装性 * 暴力私有 */ public class ReflectDemo4 { public static void main ... 
- java 通过反射机制调用某个类的方法
		package net.xsoftlab.baike; import java.lang.reflect.Method; public class TestReflect { public s ... 
- 使用反射获取类中的属性(可用于动态返回PO类的列,当做表格的表头)
		//利用反射取类中的属性字段 try { Class clazz = Class.forName("houji.bean.model.TaskModel"); Field[] fi ... 
随机推荐
- UVALive 3401 彩色立方体
			https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ... 
- miniprofiler对方法的时间性能检测
			miniprofiler对方法的时间性能检测 直接上代码 using StackExchange.Profiling; ... var profiler = MiniProfiler.Current; ... 
- css3 三角形
			https://jsbin.com/gexezo/edit?html,css,output https://jsbin.com/gexezo 
- 《BI项目笔记》——微软BI项目笔记连载
			本系列文章主要是结合实际项目,加上自己的总结,整理出来的一系列项目笔记,涉及微软SQL Server2008中商务智能开发中的SSAS.SSIS模块: 准备工作: <BI项目笔记>基于雪 ... 
- window 配置wnmp(转下整理 ,全)
			工具/原料 RunHiddenConsole.exe 下载地址:http://pan.baidu.com/share/link?shareid=100074&uk=822373947 方法 ... 
- 学习UFT11.5历程(三)
			已经用UFT11.5完成了几个大流程的录制和脚本调测. 现整理下这段过程中脚本中应该记住的点(QTP是VB脚本): 1. 循环和条件部分_reporter结果展示 For i = 1 To brow ... 
- reactiveCocoa
			我的理解 1通过block把按钮的addtarget的监听,处理,两个步骤二合一了, 好处是若在本控制器内添加监听,更方便 在自定义类监听就不一定了,因为经常监听到了,不一定就是自己处理,一般另外通知 ... 
- VS中Qt的探索02
			边看C++ GUI QT4教程,边在VS2010中进行编程学习探索. 在使用Qt设计师时,其中每一个对象的ObjectName属性是非常重要的,在程序功能的实现过程中,需要不断的使用该变量名. 当所有 ... 
- 【腾讯云的1001种玩法】在腾讯云上创建您的SQL Cluster(5)
			版权声明:本文由李斯达 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/97264001482830465 来源:腾云阁 h ... 
- [WPF]ComboBox.Items为空时,点击不显示下拉列表
			ComboBox.Items为空时,点击后会显示空下拉列表: ComboBox点击显示下拉列表,大概原理为: ComboBox存在ToggleButton控件,默认ToggleButton.IsChe ... 
