Java_反射demo
package com.cnit.reflect; import java.lang.reflect.Field;
import java.lang.reflect.Method; public class Main { /**
* @param args
*/
public static void main(String[] args) {
try {
Class<?> classObj = Class.forName("com.cnit.reflect.bean.Person");
Object obj = classObj.newInstance();
//设置变量值
setFieldValue(classObj, obj,"str", "wangwu");
System.out.println(getFieldValue(classObj, obj, "str"));
Object paramValue[] = new Object[1];
paramValue[0] = "liu si";
setMethodValue(classObj, obj, "setStr",paramValue , String.class);
System.out.println(getMethodValue(classObj, obj, "getStr"));;
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 给方法设值
* @param classLoad
* 类加载器
* @param obj
* 类的对象
* @param methodName
* 方法名
* @param pramValue
* 设置的参数的值
* @param parameterTypes
* 参数的类型
*/
private static void setMethodValue(Class<?> classLoad,Object obj,String methodName,Object[] pramValue,Class<?>... parameterTypes) {
try {
Method method = classLoad.getDeclaredMethod(methodName, parameterTypes);
method.setAccessible(true);
method.invoke(obj, pramValue);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取方法的值
* @param classLoad
* 类加载器
* @param obj
* 类的对象
* @param methodName
* 方法名
* @return Object
* 返回的值
*/
private static Object getMethodValue(Class<?> classLoad,Object obj,String methodName) {
try {
Method method = classLoad.getDeclaredMethod(methodName);
method.setAccessible(true);
return method.invoke(obj);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 设置属性的值
* @param classObj
* 类加载器
* @param obj
* 类的对象
* @param fieldValue
* 变量的值
*/
private static void setFieldValue(Class<?> classObj,Object obj ,String fieldName,Object fieldValue) {
try {
Field field = classObj.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(obj, fieldValue);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取属性的值
* @param classObj
* 类加载器
* @param obj
* 类的对象
* @return
* 变量值
*/
private static Object getFieldValue(Class<?> classObj,Object obj,String fieldName) {
try {
Field field = classObj.getDeclaredField(fieldName);
field.setAccessible(true);
return field.get(obj);
} catch (Exception e) {
e.printStackTrace();
}
return null;
} }
package com.cnit.reflect.bean;
public class Person {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
java 反射
Java_反射demo的更多相关文章
- java_反射_及其简单应用(2016-11-16)
话不多说直接上代码 接口: package bean; /** * user接口 */ public interface User { public String getName(); public ...
- 反射demo(拷贝一个对象)
经过了上一次对反射的初步认知,最近又接触到了后,做了一个小demo,感觉这次带了一点理解去做的,比第一次接触反射好了许多. 上次学习的链接,有一些反射用的基础语句.https://www.cnblog ...
- Java_反射机制详解
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...
- java_反射
反射:reflect 成员属性:Field 成员方法:Method 构造方法:Constructor 类:Class 引用,援引:invoke 新实例:newInstance Decla ...
- Java_反射_范型
虽然从来没有被面过,但是必须知道,因为classForname classloader被面过多次了. 一.Class.forName动态加载 1.编译时加载类是静态加载类, ...
- Java反射之方法反射demo
package reflect; import java.lang.reflect.Method; public class ClassDemo3 { public static void main( ...
- [No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...
- Java 反射 调用 demo
基础类.供demo反射练习 package fanshe; public class Person { public String name; private String age; private ...
- 面向对象 反射 和item系列和内置函数和__getattr__和__setattr__
反射 反射主要用在网络编程中, python面向对象的反射:通过字符串的形式操作对象相关的属性.python的一切事物都是对象. 反射就是通过字符串的形式,导入模块:通过字符串的形式,去模块寻找指定函 ...
随机推荐
- WIN10在loadrunner安装或path4插件安装时遇到的管理员阻止程序运行---解决方案(可用)
方法1:关闭用户账户控制1.“win+x”进入控制面板,选择安全性与维护,在左侧更改windows smartscreen筛选器设置,选择"不执行任何操作",单击确定即可.2.“w ...
- VUE项目小试牛刀
首先安装webstorm:http://www.jetbrains.com/webstorm/ (推荐) 再安装node.js:https://nodejs.org/en/download/ (必 ...
- jfinal处理完html提交过来的数据,将处理信息返回给html页面。html根据返回值进行相应的处理
1.前台jQuery代码: $.ajax({ url: "/admin/jcsjpz/syxmdy/RemoveSyxm", data: {data: id}, success: ...
- 201621123002《JAVA程序设计》第五周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口 interface关键字 implements关键字 Comparable abstract Comparator 1.2 ...
- python 用文本来提供输入信息的模板,不用每次都手动粘贴了
#下面这一段用一个txt来保存input的信息来模拟input.最后提交代码时候删除这一段即可. a9999=open('1.txt','r') def input(): return a9999.r ...
- OpenSessionViewFilter
OpenSessionViewFilter是spring提供的一个针对hibernate的一个支持类,其主要的意思是=在发起一个页面请求的时候打开session,并且保持session直到请求结束,具 ...
- turtle库的学习笔记
(1)turtle使用pen来绘制图形 pendown() 放下画笔,移动到指定点后继续绘制 penup() 提起画笔,用于另起一个地方绘制时使用 pensize(width) 设置画笔线条 ...
- jquery的ajax及注意事项
1.引jquery包(jquery-1.8.0.min.js) <script type="text/javascript"> $(function () { //根据 ...
- docker相关操作
docker 安装参照官网一步一步来,特别简单,主要是下载比较慢: docker 需要 管理员权限: docker 相关命令: 容器生命周期管理 — docker [run|start|stop|re ...
- 【python-appium】手机一直提示重新安装settings unlock 输入法等 注释掉以下代码
注释掉目录:C:\Program Files (x86)\Appium\node_modules\appium\lib\devices\android\android.js this.initUnic ...