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. ES6 Generator 异步编程解决方案&&&promise

    Generator: 是比promise更高级的解决方案 next   yield function 后加* 状态机 generator语法糖 长轮询  接口常查询 ================= ...

  2. python积累二:中文乱码解决方法

    根据网上提供的解决方法:添加#coding=utf-8或# -*- coding: utf-8 -*- #coding=utf-8 print "还不行?" 执行结果:还是乱码!: ...

  3. 通过Solrj实现对索引库中数据的局部更新操作

    for (UpdateIndexDTO updateIndexDTO : data) { // 局部更新 SolrInputDocument doc = new SolrInputDocument() ...

  4. python 去除字符串末尾的子串

    建议使用 "字符串".replace("要去除的字符串", "") 尽量不要使用 strip() ,有时会引入意想不到的结果.strip() ...

  5. Spring遇到的问题合集

    2018-09-15 元素 "tx:annotation-driven" 的前缀 "tx" 未绑定. 后来我加了 http://www.springframew ...

  6. 2019.03.02 bzoj2565: 最长双回文串(pam)

    传送门 题意简述:问最长的由两个回文串连接而成最长字串长度. 思路: 正反串各建一个pampampam然后就完了. 代码: #include<bits/stdc++.h> #define ...

  7. MFC在对话框中嵌入对话框

    在对话框中嵌入子对话框 代码 m_childDlg = new CChildDlg(); m_childDlg->Create(IDD_CHILD_DIALOG,AfxGetApp()-> ...

  8. 深入理解定位父级offsetParent及偏移大小offsetTop / offsetLeft / offsetHeight / offsetWidth

    深入理解定位父级offsetParent及偏移大小 [转载] 前面的话 偏移量(offset dimension)是javascript中的一个重要的概念.涉及到偏移量的主要是offsetLeft.o ...

  9. zabbix items

    zabbixversion:3.2.8 在添加zabbix items的时候,注意store value的设置非常实用,有三种选择: As is:d对接受到的结果不做任何处理 Delta(speed ...

  10. Apache Thrift的C++多线程编程定式

    Facebook贡献给Apache的开源RPC组件Thrift有着广泛的应用,C++中使用Thrift也十分普遍,但由于Thrift的Handler会被多个线程调用,因而多线程中应用并不直接的友好,利 ...