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中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...
随机推荐
- 卷积与反卷积以及步长stride
1. 卷积与反卷积 如上图演示了卷积核反卷积的过程,定义输入矩阵为 I(4×4),卷积核为 K(3×3),输出矩阵为 O(2×2): 卷积的过程为:Conv(I,W)=O 反卷积的过称为:Deconv ...
- SignalR NuGet程序包
最近公司有一个边看直播边聊天的需求,直播好搞,直接用腾讯的小直播,组装推流和播放地址,把推流地址拿出去就OK,只要一推流,就可以使用播放地址观看直播,看完后通过webclient去异步下载直播的视频到 ...
- 通过eclipse创建项目
基于eclipse的Java文件:项目(project)<类(class)<方法(method),即方法method必须基于class, class必须基于project. 项目是程序的源 ...
- 学习net core的一些疑问?
所有的内容是否一定都要依赖注入? 获取配置文件的方式是否在类库是获取不到环境变量的? 老出现:InvalidOperationException: Unable to resolve service ...
- 二、求水仙花数,打印出100-999之间所有的"水仙花数"
所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方 public c ...
- Linux文件系统命令 split
命令:split 功能:将文件按照一定的规则进行切割 用法:-l 表示按照行数进行切割. -b 表示按照字节进行切割,切割后的文件名为自己定义的文件名+aa,ab,ac类似的后缀. eg: 按照行数进 ...
- Python 基础的应用day2
1 用户交互input,将用户输入的内容赋值给 name 变量 后只能是字符串str. 区别2和3: ps :python2:raw_input python3:input 例 :1 nam ...
- 字符界面的贪吃蛇--链表--C++
前天看了下链表,由于平时对链表的使用不多,所以对链表的应用也没什么了解,所以想来想去,就想用链表实现一下贪吃蛇. 下面言归正传,先看效果图,再看代码,其他没有了! 图1: 图2: 代码: #inclu ...
- apache rewrite 规则
啥是虚拟主机呢?就是说把你自己的本地的开发的机子变成一个虚拟域名,比如:你在开发pptv下面的一个项目 127.0.0.1/pptv_trunk,你想把自己的机器域名变成www.pptv.com.那么 ...
- 浅谈generater
一.什么是generater? 1.generater 是一个工具类 2.由mybatis提供的用户生成pojo对象.mapper接口类.mapper映射文件的工具 二.使用generater 1.添 ...