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 下用 Nginx 和 uwsgi 部署 flask 项目

    前几天利用flask 写了几个调用salt-api 的接口,需要上线到正式环境,搜了一下 都是 用 nginx + uwsgi 来部署,这里记录下关键的配置项. 1.首先将代码上传到服务器上目录为: ...

  2. 学习笔记《简明python教程》

    学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...

  3. sql语句-单表查询

    一:单表查询 CREATE TABLE `Score`( `s_id` ), `c_id` ), `s_score` ), PRIMARY KEY(`s_id`,`c_id`) ); ); ); ); ...

  4. kafka可视化客户端工具(Kafka Tool)的基本使用

    1.下载 下载地址:http://www.kafkatool.com/download.html 2.安装 根据不同的系统下载对应的版本,我这里kafka版本是1.1.0,下载kafka tool 2 ...

  5. 利用Linux信号SIGUSR1调试程序

    Linux嵌入式由于诸多的限制,调试方法有限,常常出现面对Bug束手无策的情况,现在介绍一种通过信号处理对Linux嵌入式应用程序进行调试的方法. linux中一共有32种信号,在/usr/inclu ...

  6. vuex 中五大核心以及map函数的应用

    什么是vuex? 我理解的vuex就是数据和状态的管理 如果在模块化构建系统中,请确保在开头调用了 Vue.use(Vuex) 五大核心: const store = new Vuex.Store({ ...

  7. PostFix添加多个端口

    /usr/local/*/config/postfix/master.cf 在/etc/services中搜索smtp,复制,添加smtp2<与上面一步对应起来的服务名>,后面为需要添加的 ...

  8. python基础之Day8

    一.什么是文件 文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位 文件的操作核心就:读.写 即我们只需要对于进行读写操作,就是对操作系统发起请求,然后由操作系统将用户或者应用程序对文件的读写 ...

  9. Json 简记

    JSON : JavaScript Object Notation ---- JavaScript 对象表示语法 Json  比  XML 小,比 xml 快 ==================== ...

  10. 别人的Linux私房菜(11)认识与学习BASH

    Linux下使用BASH   Bourne Again Shell        另外一种由用于Unix的伯克利大学的Bill Joy设计的C Shell 系统中合法的shell会写入到/etc/sh ...