首先说下反射是什么?反射是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. Oracle(DML)

    数据操作语言: insert update delete 事务控制语言: commit rollback savepoint 1.insert语句 两种格式: 直接插入 子查询插入 1. 直接插入基本 ...

  2. Ubuntu下安装Koala

    1.下载koala ,官方网址 目前官方链接的到百度云上的包好像有问题,不能安装,这里分享下 https://yunpan.cn/ckAF4L3TR4kKG (提取码:179a) 2.执行 $ sud ...

  3. JAVA 1.7 流程控制语句 续

    1. Java中的循环控制语句一共有3种,分别是while,do… while以及for循环.2. while循环,形式为:while(布尔表达式){//待执行的代码}3. do…while循环,新式 ...

  4. Oracle 新增删除账户

    新增用户: create user test identified by 123456;grant dba,connect,resource to test; 删除账户: drop user xxx ...

  5. PHP获取当前时间戳,当前时间、及解决时区问题

    一.获取当前时间戳 方法1:通过time函数 time(); 方法2:通过$_SERVER中的REQUEST_TIME元素 $_SERVER['REQUEST_TIME']; 方法3:通过strtot ...

  6. 关于如何使用Identity的文献

    有几篇文件,深入浅出地讲解了如何一步一步的使用Identity,感觉十分有用,留下链接,备查. 1. Configuring Db Connection and Code-First Migratio ...

  7. android APK更新

    菜鸟的博客请多多指教 最近做了一个新功能,更新APK的功能 1.更新APK是一个耗时的任务,我采用了一个服务来做,上次在网上看到服务是在主线程里面,自己也测试了下,数据是真的 所以下载动作还必须在服务 ...

  8. 正则匹配中 ^ $ 和 \b 的区别

    正则匹配中 ^ $ 和 \b 的区别     ^和$分别代表字符串的开始和结束,因此^\d$只能匹配包含一个数字的字符串\b代表单词边界,其前后必须是不同类型的字符,可以组成单词的字符为一种类型,不可 ...

  9. Inverted sentences

    And ever has it been that love knows not its own depth until the hour of separation.  除非临到了别离的时候,爱永远 ...

  10. Struts2标签之Checkbox

    <s:checkbox name="permisskey" label="帅哥" value="true" fieldValue=&q ...