反射调用普通方法|学习笔记

简介: 快速学习反射调用普通方法

开发者学堂课程【Java 高级编程反射调用普通方法】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/20/detail/382


反射调用普通方法


内容简介:


一、获取全部方法

二、自定义方法信息展示

三、在不导入指定类开发包的情况下实现属性的配置

 

一、获取全部方法

在进行反射处理的时候,也可以通过反射来获取类之中的全部方法,但是需要提醒的是,如果要想通过反射调用这些方法,必须有一个前提条件类之中要提供有实例化对象。

 

在 class 类里面提供有如下的操作,可以获取方法对象:

1. 获取全部方法;

public Method[] getMethods()throws SecurityException

 

2. 获取指定方法;

public Method getMethod(String name,

Class<?>... parameterTypes)

throws NoSuchMethodException,SecurityException

3. 获取本类全部方法;

public Method[] getDeclaredMethods()

throws SecurityException

 

4. 获取本类指定方法;

public Method getDeclaredMethod(String name,

Class<?>.. parameterTypes)

Throws NoSuchMethodException,

SecurityException

 

范例:获取全部方法

package cn.mldn.demo;

import java.lang.reflect.Method;

import cn.mldn.vo.Person;

public class JavaAPIDemo {

public static void main(String[] args) throws Exception {

C1ass<?>cls = Person.class;//获限指定类的q1ass对象

//获取全部方法《包括父类中的方法)

Method methods []=cls.getMethods();

for (Method met : methods){

System.out.println(met);

//获取本类方法

Method methods [] = cls.getDeclaredMethods() ;l

for (Method met:methods)(

System.out.println(met);

注意加入分割线

 

二、自定义方法信息展示

在构造方法时难以发现两者的区别,于是举这个例子。但是需要注意的是,这个时候的方法信息的获取是依靠 method 类提供的 tostring() 方法完成的。

在很多时候,也可以由用户自己来拼凑方法信息的展凑形式。打开 system. 会把所有方法信息摆出来,但是这个信息不可能按照他默认的方法来展示,于是可以自定义方法信息显示。


范例:自定义方法信息西显

图片18.png

Met 中有一个方法叫 getname,在方法名称前,应该有返回值类型和修饰符;该修饰符是整型;参考 Modifier 类,Modifier 中常量都是整型,刚才输出的是对应的内容,但是如果想还原,能够看懂的是 public,可以通过方法 tostring 来实现。

修饰符完成之后,需要追加方法返回类型。拥有返回值类型后加上 getname 之后方法名称就需要加括号。括号还需要考虑 get parameterTypes 得到参数类型。

之后每个参数参与for循环,继续加入控制,执行代码后方法出现。信息反射完成,得到方法名称。

 

这种代码只需要清楚可以根据反射获取方法的结构即可,不需要做过多的深入理解,但是在 method 类里面有一个致命的重要方法

Public Ob ject invoke(ob ject  ob j, Ob ject...  args) throws

I11egal AccesException,I11egal ArgumentException,

InvocationTargeException

 

后续所有操作都是通过此方法展开的。Object 描述的是实力对象,这是反射调用类中的方法。

在 person 类里面,为 name 属性追加有 setter 与 getter 方法。

public class Person extends AbstractBase implements IMessageService,IChannelService {

private String name

private int age ;

public Person(){}

public Person(String name,int age) (

this.name = name ;

this.age = age;

public void setName(String name)(this.name ▪ name;

public String getName(){

return name;}

 

随后需要通过反射机制来实现 person 类之中的 setter 与 getter 方法的调用处理。

可以通过 class for name 识别化,通过此方法识别的优点就是不用导入。

 

三、在不导入指定类开发包的情况下实现属性的配置


范例:在不导入指定类开发包的情况下实现属性的配置

所以代码需要按照如下思考

1.任何情况下,如果要想保存类中的属性或者调用类中的方法,都必须保证存在有实例化对象,居然不允许导入包,那么就反射实例化。

 

2.如果要想进行方法的调用,那么一定要获取方法的名称。Attribute 是 string 类型,用于获取指定的方法。Setname 为方法名称。Invoke 要传递参数,接收实例化对象。

String setMethodName w "setName“//方法名

Method setMethod= cls-getDeclaredMethod(setMethodName,String-class); // 期所E的方法

setMethod.invoke(obj,value);

String getMethodName = "getName";

Method getMethod = cls.getDeclaredMethod(getMethodName);

System.out.print1n(getMethod.invoke(obj));

 

代码执行能够反射调用。

利用此类操作,整体的操作形式不会有任何的明确的类对象产生,一切都是依靠反射机制处理的,这样的处理避免了与一个类的耦合问题。这种方法在某一个复杂的类处理上较为方便。

相关文章
|
9月前
调用反射类的指定方法
调用反射类的指定方法
|
9月前
调用反射类的方法
调用反射类的方法
|
Java API Spring
反射:替对象执行方法
反射:替对象执行方法
117 0
反射:替对象执行方法
Java反射->什么是反射?->获取方式
Java反射->什么是反射?->获取方式
Java反射->什么是反射?->获取方式
C#使用反射使用类的函数
C#使用反射使用类的函数
|
XML Java 数据格式
反射机制(什么是反射、反射操作构造器、方法、字段、反射加载资源)
反射机制(什么是反射、反射操作构造器、方法、字段、反射加载资源)
173 0
反射机制(什么是反射、反射操作构造器、方法、字段、反射加载资源)
|
安全 Java 开发者
反射调用构造方法|学习笔记
快速学习反射调用构造方法
141 0
反射调用构造方法|学习笔记
如何使用反射获取类对象
如何使用反射获取类对象
136 0
如何使用反射获取类对象
|
Java 开发者
反射实例化对象|学习笔记
快速学习反射实例化对象
161 0
反射实例化对象|学习笔记
(十八) 反射的原理是什么,反射创建类实例的三种方式是什么?
javac在这一阶段会把java代码编译为class文件,保存在硬盘中,这个文件中保存着这个类的类名、成员名、构造方法、其他方法等。