实现:

package com.ljy;

import java.lang.reflect.Field;
import java.lang.reflect.Method; /**
*
* @ClassName: MethodFieldTest
* @Description: 采用反射技术创建对象后对目标类的成员变量和成员方法进行访问
* @author ljy
* @date 2019年9月12日 下午2:51:52
*
*/
public class MethodFieldTest {
public static void main(String[] args) {
try {
// 获取Class对象
Class clazz = Class.forName("com.ljy.Teacher");
// 动态创建Teacher对象
Object obj = clazz.newInstance(); /**
* 采用反射技术创建对象后对目标类的成员变量进行访问
*/
// 调用getDeclaredField()方法取得name的属性对应的Field对象
Field field = clazz.getDeclaredField("name");
// 取消属性的访问控制权限,即使private属性也可以进行访问
field.setAccessible(true);
// 调用get()方法取得对应的属性值 , field.get(obj)相当于obj.getName()
System.out.println("初始值:name="+field.get(obj));
// 调用set()方法给对应属性赋值
field.set(obj, "团团");
// 调用get()方法取得对应的属性修改后的值
System.out.println("赋值后:name="+field.get(obj)); /**
* 采用反射技术创建对象后对目标类的成员方法进行访问
*/
// 调用getDeclaredMethod方法取得Teacher类中setSex()方法对应的Method对象
Method method = clazz.getDeclaredMethod("setSex", new Class[]{String.class});
// 调用invoke()方法调用method对象代表的方法
Object result = method.invoke(obj, new Object[]{"男"}); // 取得sex的属性对应的Field对象
field = clazz.getDeclaredField("sex");
// 取消属性的访问控制权限,即使private属性也可以进行访问 (每次重新给field赋值后都要重新给权限)
field.setAccessible(true);
// 调用get()方法取得对应的属性修改后的值
System.out.println("sex="+field.get(obj));
} catch (Exception e) {
e.printStackTrace();
}
} }

Teacher类(目标类):

package com.ljy;

public class Teacher {
private Integer id;
private String name;
private String sex; public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Teacher(Integer id, String name, String sex) {
super();
this.id = id;
this.name = name;
this.sex = sex;
}
public Teacher(String name, String sex) {
super();
this.name = name;
this.sex = sex;
}
public Teacher() {
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + ", sex=" + sex + "]";
} }

Java采用反射技术创建对象后对目标类的成员变量和成员方法进行访问的更多相关文章

  1. Java学习笔记10---访问权限修饰符如何控制成员变量、成员方法及类的访问范围

    1.Java有三种访问权限修饰符,分别为public.protected.private,还有一种为缺省权限修饰符的情况,记为default.其中,可以由public和default来修饰类:这四种修 ...

  2. JAVA中类以及成员变量和成员方法的修饰符的总结

    一  类的修饰符 java中的文件结构由大到小为:一个工程,一个工程下可以有许多包,每个包中可以有许多类. 类的修饰符分为         访问权限修饰符          和             ...

  3. Java的反射技术

    什么是反射机制 Java的反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能调用它的任意属性和方法.这种动态获取信息以及动态调用对象属性和方法的即使称为J ...

  4. Android(java)学习笔记109:通过反射获取成员变量和成员方法并且使用

    一.反射获取成员变量并且使用: 1.获取字节码文件对象:         Class c = Class.forName("cn.itcast_01.Person"); 2.使用无 ...

  5. Android(java)学习笔记50:通过反射获取成员变量和成员方法并且使用

    1. 反射获取成员变量并且使用: (1)获取字节码文件对象:         Class c = Class.forName("cn.itcast_01.Person"); (2) ...

  6. Java学习日记基础篇(四)——类,对象之成员变量,成员方法,构造方法

    面向对象(Object Oriented) 一.面向对象杂谈 面向对象(Object Oriented),我的翻译是以物体为目标的,就是说编程的时候是建立一个物体,然后对这个物体进行操作. Java语 ...

  7. 谈谈java中成员变量与成员方法继承的问题

    谈谈java中成员变量与成员方法继承的问题 关于成员变量和成员方法的的继承问题,我也可以做一个小测试,来看看结果. 首先我们先创建一个父类:

  8. 继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

    继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的 ...

  9. Java面向对象学习-----类的成员变量

    类的成员变量: 猜数字游戏:一个类A有一个成员变量v,通过随机产生一个100内的整数给v赋值.定义一个方法,对A类的成员变量v进行猜.   没有猜对的情况下提示如果大了则提示大了,小了则提示小了,并且 ...

随机推荐

  1. MySQL学习之路8-关联子查询

    参考文章https://zhuanlan.zhihu.com/p/41844742 成绩表如下Score: 问题:查询科目中成绩大于平均成绩的记录? SELECT * FROM Score WHERE ...

  2. "文本"组件:<text> —— 快应用原生组件

     <template> <div class="container"> <text>H-UI</text> </div> ...

  3. sprigboot 异常 Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].Tomc...

    java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com ...

  4. xargs与exec区别

    平时使用find命令查找出文件的时候有时候后面有时候用-exec有时候用管道加xargs,这2个到底有什么不同?下面就这2个的不同做简单介绍. 零.实验环境 [root@osker /]# find ...

  5. Centos 开启网络

    在VMWare上安装了Centos 7,但是发现网络无法连接. # ping www.baidu.com 确认网络无法连接 # ifconfig 查看centos7中的网络配置属性. 启动网络,开启e ...

  6. Nginx+uWSGI+Python+Django构建必应高清壁纸站

    写在前面 做这个网站的初衷是因为,每次打开必应搜索搜东西的时候都会被上面的背景图片吸引,我想必应的壁纸应该是经过专业人员精选出来的,我甚至会翻看以前的历史图片,唯一美中不足的是必应的首页只能查看最多7 ...

  7. kworkerds 挖矿木马简单分析及清理

    公司之前的开发和测试环境是在腾讯云上,部分服务器中过一次挖矿木马 kworkerds,本文为我当时分析和清理木马的记录,希望能对大家有所帮助. 现象 top 命令查看,显示 CPU 占用 100%,进 ...

  8. matlab计算相对功率

    1.对脑电数据进行db4四层分解,因为脑电频率是在0-64HZ,分层后如图所示, 细节分量[d1 d2 d3 d4] 近似分量[a4] 重建细节分量和近似分量,然后计算对应频段得相对功率谱,重建出来得 ...

  9. SPFA()判环

    1 SPFA()判负环 SPFA()判负环的原理就是在求最短路的过程中,如果存在负环,比如说要求从A到a的最短距离,设为s,但是经过a->c->b->a可以更短,所以如果一直经过a- ...

  10. Jmeter工具 组件简单认识

    JMETER 所有的组件(元素)都是基于测试计划的,先有测试计划然后才有 JMETER 组件 JMETER 核心组件1.JMETER中的 Threads 类似与线程数,每一个线程数代表一个虚拟用户:测 ...