JAVA技术之——反射 学习笔记-3 Method

JAVA反射机制定义:
  JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

本笔记讲述如何使用反射获取一个类的所有方法并改变其内容。



import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* JAVA反射的演示3
* 本测试类演示Method属性字段的反射
* --1 调用一个类的公开方法并且有返回值但是无参数
* --2 调用一个权限为default方法并且返回值为Void但是无参数
* --3 调用一个私有的方法并且有返回值有基本类型int参数
* --4 调用一个静态的方法并且有返回值有String类型的参数
* @author Eric
*
*/
public class ReflectDemo3Method {
public static void main(String args[]) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{

ReflectDemo3MethodBeanClass demo3 = new ReflectDemo3MethodBeanClass();
Class c3 = demo3.getClass();
//--1 调用一个类的公开方法并且有返回值但是无参数
Method m1 = c3.getMethod("publicVoid");
Object res1 = m1.invoke(demo3, null);//null是因为publicVoid()是个无参的方法,当然也可以填写一个长度为0的数组
System.out.println("方法1的测试结果返回值为:\t"+res1);
//--2 调用一个权限为default方法并且返回值为Void但是无参数
Method m2 = c3.getDeclaredMethod("defaultVoid");//getMethod方法只能访问公开的方法。但是getDeclaredMethod只能访问子类声明的方法,不过可以访问私有方法。
m2.setAccessible(true); 访问有权限的方法时,需使用此方法设置访问性,否则会因为权限不够无法访问。
Object res2 = m2.invoke(demo3, new Object[0]);//填写一个长度为0的数组是因为defaultVoid()是个无参的方法,当然也可以填null
System.out.println("方法2的测试结果返回值为:\t"+res2);
//--3 调用一个私有的方法并且有返回值有基本类型int参数
Method m3 = c3.getDeclaredMethod("privateInt",int.class);
m3.setAccessible(true);
Object res3 = m3.invoke(demo3, new Integer(3));//null是因为publicVoid()是个无参的方法,当然也可以填写一个长度为0的数组
System.out.println("方法3的测试结果返回值为:\t"+res3);
//--4 调用一个静态的方法并且有返回值有String类型的参数
Method m4 = c3.getDeclaredMethod("staticVoidString",String.class);
m4.setAccessible(true);
Object res4 = m4.invoke(demo3,"测试4");
System.out.println("方法4的测试结果返回值为:\t"+res4);
}
}


测试结果如下:
[list]
[*]
方法1的测试结果返回值为: 运行了 publicVoid方法
[*]
运行了DefaultVoid方法!!!!!
方法2的测试结果返回值为: null
[*]
方法3的测试结果返回值为: 运行了 privateInt方法,参数值:3
[*]
方法4的测试结果返回值为: 运行了staticVoidString方法,参数值:测试4
[/list]

测试模型如下:



import java.lang.reflect.Field;

/**
* 用于测试Demo3-演示Method属性字段的反射的模型类
* 对应4种测试情况的4个方法
* --1 调用一个类的公开方法并且有返回值但是无参数
* --2 调用一个权限为default方法并且返回值为Void但是无参数
* --3 调用一个私有的方法并且有返回值有基本类型int参数
* --4 调用一个静态的方法并且有返回值有String类型的参数
* @author Eric
*
*/
public class ReflectDemo3MethodBeanClass {

public String publicVoid() {
return "运行了 publicVoid方法";
}

void defaultVoid() {
System.out.println("运行了DefaultVoid方法!!!!!");
}

private String privateInt(int i) {
return "运行了 privateInt方法,参数值:" + i;
}

static String staticVoidString(String s) {
return "运行了staticVoidString方法,参数值:" + s;
}

}



[b]作业:[/b]试试写出一个方法,输入一个类,即可输出这个类所拥有的public权限的方法的个数以及toString方法的返回结果的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值