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的更多相关文章

  1. java_反射_及其简单应用(2016-11-16)

    话不多说直接上代码 接口: package bean; /** * user接口 */ public interface User { public String getName(); public ...

  2. 反射demo(拷贝一个对象)

    经过了上一次对反射的初步认知,最近又接触到了后,做了一个小demo,感觉这次带了一点理解去做的,比第一次接触反射好了许多. 上次学习的链接,有一些反射用的基础语句.https://www.cnblog ...

  3. Java_反射机制详解

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...

  4. java_反射

    反射:reflect   成员属性:Field  成员方法:Method 构造方法:Constructor  类:Class 引用,援引:invoke   新实例:newInstance  Decla ...

  5. Java_反射_范型

    虽然从来没有被面过,但是必须知道,因为classForname classloader被面过多次了. 一.Class.forName动态加载  1.编译时加载类是静态加载类,             ...

  6. Java反射之方法反射demo

    package reflect; import java.lang.reflect.Method; public class ClassDemo3 { public static void main( ...

  7. [No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法

    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...

  8. Java 反射 调用 demo

    基础类.供demo反射练习 package fanshe; public class Person { public String name; private String age; private ...

  9. 面向对象 反射 和item系列和内置函数和__getattr__和__setattr__

    反射 反射主要用在网络编程中, python面向对象的反射:通过字符串的形式操作对象相关的属性.python的一切事物都是对象. 反射就是通过字符串的形式,导入模块:通过字符串的形式,去模块寻找指定函 ...

随机推荐

  1. [原]CentOS 7.2 1511部署L2TP/IPsec服务器及客户端

    快过年了,感觉从去年开始,我们公司就变成了“别人的公司”,基本上提前一星期就放假了,好开心.正好可以利用这一段时间,把前段时间一些疑惑的问题解决下:) 然而挡在面前的一个拦路虎是:很多时候不能愉快的G ...

  2. 这里有一篇简单易懂的webSocket 快到碗里来~

    这篇文章是我在学习的时候看到的  刚开始还不是很理解  后来自己百度 又问了一些人  回过头在看这篇文章 真的挺好的 但是原创已经不知道是谁了  转载哦~~~ -------------------- ...

  3. shiro的rememberMe不生效

    问题描述:已经设置了map.put("/**", "user"),但是查看网页Cookie没有值. 问题查思路: 1.确定使用UserFilter过滤器,因为只 ...

  4. 实现一个jsp同时提交两个form到两个Servlet

    <%@ page contentType="text/html;charset=GBK" language="java"%> <html> ...

  5. RQNOJ 1 明明的随机数

    查重和排序,这里我用的set进行存储数据,利用了set的唯一性和自动性,方便了很多 #include <iostream> using namespace std; #include &l ...

  6. 【轻松前端之旅】​CSS选择器中的空格与尖括号有何区别?

    CSS选择器中的空格与尖括号有何区别? 例子1: .a .b { margin: 0; } 空格隔开a和b,选择所有后代元素. 例子2: .a>.b { margin: 0; } 尖括号隔开a和 ...

  7. 顺序栈的基本操作(C语言)

    由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址  但是这种用法好像C并不 ...

  8. boost--日期处理

    1.timer 不同于系统函数的timer()一般生成一个定时器,boost中的timer是一个计时器,以秒为单位,最小精度为毫秒,使用需要包含头文件"boost\timer.hpp&quo ...

  9. Shell脚本学习-数组

    跟着RUNOOB网站的教程学习的笔记 Shell数组 数组中可以存放多个值,Bash Shell只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与PHP类似). 与大部分编程语言类似,数 ...

  10. Beta冲刺 (3/7)

    Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 熟悉并编写小程序的自定义控件 编辑文 ...