java黑魔法-反射机制-02-通过Java反射调用其他类方法

package com.aaron.reflect; import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException; /**
* Created by IntelliJ IDEA.
* File: TestRef.java
* User: leizhimin
* Date: 2008-1-28 14:48:44
*/
public class TestRef {
//直接 foo.outInfo(); 也可以调用那个自定义的方法
public static void main(String args[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
Foo foo = new Foo("这个一个Foo对象!"); //一个类的真正的对象
Class<?> clazz = foo.getClass(); // ?任意类型 Foo.class赋值给clazz也可以 Method m1 clazz.getDeclaredMethod("outInfo"); //自定义的方法,m1即是方法名
Method m2 = clazz.getDeclaredMethod("setMsg", String.class);//set方法
Method m3 = clazz.getDeclaredMethod("getMsg"); //get方法
//下面的语句输出--------这是测试Java反射的测试类
m1.invoke(foo); //不用print就可以打印消息,而且断点foo是一个确实Foo类的对象
m2.invoke(foo, "重新设置msg信息!"); //不输出
String msg = (String) m3.invoke(foo);
System.out.println(msg); //重新设置msg信息!
} //方法名.invoke(类的对象);
} class Foo {
private String msg; public Foo(String msg) {
this.msg = msg;
} public void setMsg(String msg) {
this.msg = msg;
} public String getMsg() {
return msg;
} public void outInfo() {
System.out.println("这是测试Java反射的测试类");
}
}
package com.aaron.reflect; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; public class Demo5 {
public static void main(String[] args) {
Class<?> herosClass = Heros.class; //获得Class类的实例
// new herosClass() 不可以new
try { // 断点里面herosClass的值是class com.aaron.reflect.Heros
Method m1 = herosClass.getMethod("setName",String.class);
Method m2 = herosClass.getMethod("getName");
Method m3 = herosClass.getMethod("say");
// 或者 Object userInfo = herosClass.newInstance()
Heros userInfo =(Heros) herosClass.newInstance();//userInfo值并不是以前那些对象值那样
m1.invoke(userInfo,"影魔");//调用了set方法了在这里
System.out.println("调用set方法:"+userInfo);//输出[Heros [name=影魔, type=null,camp=0 ]]
System.out.println("调用get方法:"+m2.invoke(userInfo));//调用get方法:影魔
m3.invoke(userInfo); // 可以调用自己的方法
} catch (Exception e) {
e.printStackTrace();
}
}
} package com.aaron.reflect;
public class Heros {
private String name;//名字
private String type;//类型
private int camp;// public Heros(){} public Heros(String name, String type, int camp) {
super();
this.name = name;
this.type = type;
this.camp = camp;
}
public void say(){
System.out.println("可以调用自己的方法");
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getType() {
return type;
} public void setType(String type) {
this.type = type;
} public int getCamp() {
return camp;
} public void setCamp(int camp) {
this.camp = camp;
} @Override
public String toString() {
return "Heros [\n name=" + name + ", \n type=" + type + ", \n camp=" + camp + "\n]";
} }
java黑魔法-反射机制-02-通过Java反射调用其他类方法的更多相关文章
- python与java的内存机制不一样;java的方法会进入方法区直到对象消失 方法才会消失;python的方法是对象每次调用都会创建新的对象 内存地址都不i一样
python与java的内存机制不一样;java的方法会进入方法区直到对象消失 方法才会消失;python的方法是对象每次调用都会创建新的对象 内存地址都不i一样
- 细述 Java垃圾回收机制→Types of Java Garbage Collectors
细述 Java垃圾回收机制→Types of Java Garbage Collectors 转自:https://segmentfault.com/a/1190000006214497 本文非原创, ...
- Java反射机制详解(1) -反射定义
首先,我们在开始前提出一个问题: 1.在运行时,对于一个java类,能否知道属性和方法:能否去调用它的任意方法? 答案是肯定的. 本节所有目录如下: 什么是JAVA的反射机制 JDK中提供的Refle ...
- JAVA中反射机制五(java.lang.reflect包)
一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...
- java反射机制,以及对反射机制的了解,如有差池欢迎点评(初学者勿喷)
本人学习java时间不长,但是对java很感兴趣,知道有博客园这个平台果断的注册,记录我的java成长日记,这也是我的处女作,虽然很菜但是还是希望大家能见证我的成长,觉得可以的可以和我讨论一起学习 在 ...
- JAVA中反射机制六(java.lang.reflect包)
一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...
- java反射机制,以及对反射机制的了解
反射是什么?反射有什么用?我相信大家在开始学的时候都会有疑惑,直到如今我学的还不够深入只能简单的说说反射的作用,理论的我也听得很迷糊,接下来我就以几个例子来 写写反射的用处: 494696003群,有 ...
- Java反射机制(三):调用对象的私有属性和方法
一. 通过反射调用类中的方法 在正常情况下,得到类的对象后,我们就可以直接调用类中的方法了,如果要想调用的话,则肯定必须清楚地知道要调用的方法是什么,之后通过Class类中的getMethod方法,可 ...
- 基于NACOS和JAVA反射机制动态更新JAVA静态常量非@Value注解
1.前言 项目中都会使用常量类文件, 这些值如果需要变动需要重新提交代码,或者基于@Value注解实现动态刷新, 如果常量太多也是很麻烦; 那么 能不能有更加简便的实现方式呢? 本文讲述的方式是, 一 ...
- c#反射机制学习和利用反射获取类型信息
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...
随机推荐
- HashMap实现原理分析--面试详谈
1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1 ...
- php随手记
引用(&)是变量的别名,而不是指针,可用unset(变量名)把此变量的别名注销掉,等于没有声明此变量. @为错误抑制符,可以用在任何表达式前面. ``为命令操作符,可以执行系统命令. inst ...
- netcore 2.0 部署 到iis
.net Core2.0应用程序发布window服务器报错容易错过的配置. 1.应用程序发布. 2.IIS上新建网站. 3.应用程序池选择无托管代码. 4.服务器上安装DotNetCore.1.0.2 ...
- mongoose的笔记
本文地址转载自:http://www.cnblogs.com/egger/archive/2013/06/14/3135847.html 本文将介绍操作符的使用,配合操作符,我们可以执行更加复杂的操 ...
- DevExpress v18.1新版亮点——Reporting篇(三)
用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress Reporting v18.1 的新功能,快来下载试用新版本 ...
- jquery元素插入、删除、清空、找父子级元素
1)jquery元素插入 <!--位置1--> <div id='test'> <!--位置2--> <div>测试</div> <! ...
- 安装gcc
yum -y install gcc yum -y install gcc-c++ yum install make -- 或者 yum groupinstall "Developmen ...
- Java基础复习
java语言的一个核心:jdk, java development kits---面向开发人员jre, java Runtime Environment---服务器上 java虚拟机---(以字节码为 ...
- day 34 进程线程排序 抢票 初级生产者消费者
# 实现的内容 模拟购票 20个人买,就有一张购票查,的时候大家都看到,但是购买只能一人购买成功#利用互斥锁# from multiprocessing import Process,Lock# im ...
- php 正则概述
修饰符 s 模式中的点号元字符匹配所有字符 非打印字符 字符 含义 \cx 匹配由x指明的控制字符.例如, \cM 匹配一个 Control-M 或回车符.x 的值必须为 A-Z 或 a-z ...