Java-反射之方法反射的基本操作

以前,我们调用一个类里面的方法,通常通过对象名来进行操作。今天我们通过反射机制来调用类里面的方法,包括私有的方法也可以调用。

 1 package com.example.Reflect;
 2
 3 import java.lang.reflect.InvocationTargetException;
 4 import java.lang.reflect.Method;
 5
 6 public class MethodDemo1 {
 7     public static void main(String[] args) {
 8         A a = new A();
 9         Class c1 = a.getClass();
10         /**
11          * 通过getMethod
12          */
13         try {
14             /**获得print(int , int)方法
15              *
16              */
17             //Method method = c1.getMethod("print", new Class[]{int.class, int.class});
18             Method method = c1.getMethod("print", int.class, int.class);
19             /**
20              * 如果方法返回值类型为空的话,则下面的调用返回的值null
21              * 否则返回的是Object的对象
22              */
23             //Object invoke = method.invoke(a, new Object[]{10, 20});
24             Object invoke = method.invoke(a, 10, 20);
25
26             /**
27              * 获得print()方法
28              */
29             //method = c1.getMethod("print");
30             method = c1.getMethod("print", new Class[]{});
31             //method.invoke(a);
32             method.invoke(a, new Object[]{});
33         } catch (NoSuchMethodException | SecurityException e) {
34             // TODO Auto-generated catch block
35             e.printStackTrace();
36         } catch (IllegalAccessException e) {
37             // TODO Auto-generated catch block
38             e.printStackTrace();
39         } catch (IllegalArgumentException e) {
40             // TODO Auto-generated catch block
41             e.printStackTrace();
42         } catch (InvocationTargetException e) {
43             // TODO Auto-generated catch block
44             e.printStackTrace();
45         }
46
47     }
48 }
49 class A
50 {
51     public void print()
52     {
53         System.out.println("hello world");
54     }
55     public void print(int a, int b)
56     {
57         System.out.println(a + b);
58     }
59     public void print(String a, String b)
60     {
61         System.out.println(a + ", " + b);
62     }
63 }
时间: 2024-10-16 14:34:35

Java-反射之方法反射的基本操作的相关文章

Java反射理解(五)-- 方法反射的基本操作

Java反射理解(五)-- 方法反射的基本操作 方法的反射 1. 如何获取某个方法 方法的名称和方法的参数列表才能唯一决定某个方法 2. 方法反射的操作 method.invoke(对象,参数列表) 举例 具体操作请看下面举例: import java.lang.reflect.Method; class A{ public void print(){ System.out.println("helloworld"); } public void print(int a,int b){

java反射调用方法

1:Class类中的方法 public Method getDeclaredMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException 参数: name - 方法名 parameterTypes - 参数数组 返回: 该类与指定名和参数相匹配的方法的 Method 对象 2:Method类中的方法; public Object invoke(Object obj,

JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Fiald,Method,反射Main方法,数组的反射和实践

JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Fiald,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识Class类 想要反射,你就必须要了解一个类--Class,我们知道,java程序中的各个java类都属于同一事物,我们通常用Classliability描述对吧,反射这个概念从JDK1.2就出来了,历史算是比较悠久了,这个Class可不是关键字哦,这个是一个类,他代表的是一类事物: 我们归根结底就

java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)

Java图形用户界面中,处理事件时所必须的步骤是: 1.创建接受响应的组件(控件)2.实现相关事件监听接口3.注册事件源的动作监听器4.事件触发时的事件处理 相应的可以通过以下的集中方式来作出事件响应. [java] view plaincopyprint? <span style="font-size: 18px;">一.容器类监听 效果:单击窗体中的三个按钮,实现相应的相应时间. </span><pre class="java" n

Java反射:根据方法名动态调用方法,解决商品动态属性取值问题。

public class Goods{ private String goodsName; private String attr1; private String attr2; private String attr3; private String attr4; ......... private String attr20; setter/getter方法 } 在数据库表goods中,已知该商品的属性个数N(满足:N=5,attr1—attr5有值,attr6-attr20为空).问如何取

java的泛型与反射机制

什么是泛型? 泛型,即"参数化类型".顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参). 为什么要使用泛型? 先看如下代码: public class GenericTest { public static void main(String[] args) { List list = new ArrayList(); list.add("qqyumidi"

反射main方法

利用Java反射机制去调用其他类的main方法基于这种情形: 当程序中的某个类在运行到某处需要去调用其他类的main方法时,如果此程序并不知道此main方法所属类的名称,而只是在程序中接受某一代表此main方法所属类的名称的参数,那么这时候就不能通过“类名.main(String[] args);"这样的方式来完成调用,而需要运用Java的反射机制了,需要编写相关的反射代码来完成对其他类的main方法的调用.这个方法在进行网络编程的时候,有时候我们需要接收一个类,我们只有等到接收到了才知道类的名

Java反射总结(2):反射的应用

操作对象属性(域)的值 前面已经知道如何查看任意对象的数据域名称和类型.在编写程序时,如果想要查看域名和类型是很简单的事情,而反射机制可以查看在编译时还不清楚的对象域. 利用get方法获取域(属性)值 查看对象域的关键方法是Field类的get方法.如果f是一个Field类型的对象,obj是某个包含f域的类的对象,f.get(obj)将返回一个对象,类型为Object,其值为obj域的当前值.示例: package com.xiaoxiaoyihan.reflection; import jav

java 反射和暴力反射 两个DEMO

该类为反射函数 获取和暴力获取ReflectPoin类中的属性 package com.tuozou.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectTest { public ReflectTest() { // TODO Auto-generated con

编程基础知识——C++能不能支持Java和ObjC的反射?

C++能不能支持Java和ObjC的反射? 要回答这个问题,首先我们要清楚什么是反射.什么是反射? 教科书的解释我就不说了,(^o^)其实我也记不得.实际开发应用的反射就是在没有某个类型的头文件或者类结构定义的情况下,存取这个类型的对象的成员字段的值,调用这个对象的成员函数(方法). 比如我有定义了一个类型 Class  A,里面有 a,b,c三个字段,有fun()函数.现在我手里只有一个 void* pA,注意它的类型只是一个void指针,我手里也没有Class的头文件,我要怎么样得到,a,b