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反射调用其他类方法的更多相关文章

  1. python与java的内存机制不一样;java的方法会进入方法区直到对象消失 方法才会消失;python的方法是对象每次调用都会创建新的对象 内存地址都不i一样

    python与java的内存机制不一样;java的方法会进入方法区直到对象消失 方法才会消失;python的方法是对象每次调用都会创建新的对象 内存地址都不i一样

  2. 细述 Java垃圾回收机制→Types of Java Garbage Collectors

    细述 Java垃圾回收机制→Types of Java Garbage Collectors 转自:https://segmentfault.com/a/1190000006214497 本文非原创, ...

  3. Java反射机制详解(1) -反射定义

    首先,我们在开始前提出一个问题: 1.在运行时,对于一个java类,能否知道属性和方法:能否去调用它的任意方法? 答案是肯定的. 本节所有目录如下: 什么是JAVA的反射机制 JDK中提供的Refle ...

  4. JAVA中反射机制五(java.lang.reflect包)

    一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...

  5. java反射机制,以及对反射机制的了解,如有差池欢迎点评(初学者勿喷)

    本人学习java时间不长,但是对java很感兴趣,知道有博客园这个平台果断的注册,记录我的java成长日记,这也是我的处女作,虽然很菜但是还是希望大家能见证我的成长,觉得可以的可以和我讨论一起学习 在 ...

  6. JAVA中反射机制六(java.lang.reflect包)

    一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...

  7. java反射机制,以及对反射机制的了解

    反射是什么?反射有什么用?我相信大家在开始学的时候都会有疑惑,直到如今我学的还不够深入只能简单的说说反射的作用,理论的我也听得很迷糊,接下来我就以几个例子来 写写反射的用处: 494696003群,有 ...

  8. Java反射机制(三):调用对象的私有属性和方法

    一. 通过反射调用类中的方法 在正常情况下,得到类的对象后,我们就可以直接调用类中的方法了,如果要想调用的话,则肯定必须清楚地知道要调用的方法是什么,之后通过Class类中的getMethod方法,可 ...

  9. 基于NACOS和JAVA反射机制动态更新JAVA静态常量非@Value注解

    1.前言 项目中都会使用常量类文件, 这些值如果需要变动需要重新提交代码,或者基于@Value注解实现动态刷新, 如果常量太多也是很麻烦; 那么 能不能有更加简便的实现方式呢? 本文讲述的方式是, 一 ...

  10. c#反射机制学习和利用反射获取类型信息

    反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...

随机推荐

  1. hybrid几种模式

    native和web适合的场景 Native: 用户体验要求高 业务变动很小(如首页) 性能要求高 Web: 业务变化频繁(如广告) 性能要求低 展示性内容 hybrid App其实会有不同的分支 方 ...

  2. 初始JSP

    什么是JSP 1.JSP(Java Server Pages):在HTML中嵌入Java脚本代码 静态内容是JSP页面中的静态文本,其基本是HTML文本,与Java和JSP语法无关. 例子: 运行结果 ...

  3. 2.19 C++友元函数和友元类

    参考: http://www.weixueyuan.net/view/6350.html 总结: 借助friend关键字将其声明为友元函数,结果,在display函数体内,我们就能访问private属 ...

  4. 网口扫盲三:以太网芯片MAC和PHY的关系(转)

      问:如何实现单片以太网微控制器? 答:诀窍是将微控制器.以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同一芯片,这样能去掉许多外接元器件.这种方案可使MAC和PHY实现很好的匹配, ...

  5. netty源码理解补充 之 DefaultChannelPipeline到底是个啥

  6. jquery转换json对象为字符串

    jquery转换json对象为字符串 JSON.stringify(jsonObject),可用于单个JSON对象,也可用于JSON数组 alert(JSON.stringify(jsonObject ...

  7. 【Python】unittest-1

    一.Unittest 单元测试 将测试结果和期望值作对比 (1)       继承 (2)       引用包 (3)       执行一次test就会调用一次setup和tearDown (4)   ...

  8. MyBatis insert操作返回主键

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数: Dao.java @Override public int insert(T record) { f ...

  9. logging 模块 五星知识

    logging 是用来记录日志的,有下面5种模式,它和print功能一样,只不过,print不能控制自己打印的内容,而logging可以控制,你想打印什么东西. logging 有两种形式: 第一种: ...

  10. Python学习笔记第十周

    目录: 一.基础概念 1.多进程 2.进程间通信 3.进程锁 4.进程池 5.协程 a) greenlet b) Gevent 6.论事件驱动与异步IO 7.IO多路复用 8.Python Selec ...