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的一切事物都是对象. 反射就是通过字符串的形式,导入模块:通过字符串的形式,去模块寻找指定函 ...
随机推荐
- 9.22 Sans-serif VS Serif
在FCC做题遇到了sans-serif 以及 serif字体,第一次遇到,所以查了一下: 西方国家字母体系分为两类:serif 以及sans serif. 原来Sans-serif是无衬线字体,没有额 ...
- Jmeter创建一个web测试计划
1. 下载Jmeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 下载后解压到你想“安装”的路径下,比如: D:\Program Files ...
- C++字符串结束标识
用一个字符数组可以存放一个字符串中的字符.如: char str[12]={'I',' ','a','m',' ','h','a','p','p','y'}; 用一维字符数组str来存放一个字符串″I ...
- 关于requests库中文编码问题
转自:代码分析Python requests库中文编码问题 Python reqeusts在作为代理爬虫节点抓取不同字符集网站时遇到的一些问题总结. 简单说就是中文乱码的问题. 如果单纯的抓取微博 ...
- Git 在团队中的使用--如何正确使用Git Flow
Git的优点 Git的优点很多,但是这里只列出我认为非常突出的几点. 由于是分布式,所有本地库包含了远程库的所有内容. 优秀的分支模型,打分支以及合并分支,机器方便. 快速,在这个时间就是金钱的时代, ...
- Julia 下载 安装 juno 开发环境搭建
Windows平台 Julia 的官网 (https://julialang.org) 下载链接(https://julialang.org/downloads) 下载完成后,如果想安装在 C 盘,则 ...
- python datetime模块用法
1. 创建naive(无时区信息)的datetime对象 import datetime dt_utc = datetime.datetime.utcnow() dt_utc # datetime.d ...
- Codeforces Round #486 (Div. 3) F. Rain and Umbrellas
Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...
- unbuntu14.04下的串口软件monicom的使用
上篇文章写到了将esp-idf中的examples里的helloworld烧写进了esp32的flash里面,本文就讲讲这个例子的测试和一个项目工程的建立. 首先为了得到esp32输出的信息,需要一个 ...
- sql-向已有数据的表添加约束
语法: alter table 表名 with nocheck add constraint 约束名 约束类型 具体的约束说明 对表中现有的数据不做检查, 只对添加约束后再录入的数据进行检查. 例子: ...