[摘]Java反射的方法反射的基本操作

Java  2018年1月30日 pm5:35发布7年前 (2018)更新 城堡大人
125 0 0


这篇文字命名不太友好,但解释还是不错的。本文摘抄于《Java反射之——方法反射的基本操作

package com.imooc.reflect;

import java.lang.reflect.Method;

public class MethodDemo1 {
	public static void main(String[] args) throws Exception {
		//要获取print(int ,int )方法
		//1,要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型
		A a = new A();
		Class class1 = a.getClass();
		/*2,获取方法名称和参数列表
		 * getMethod获取的是public的方法
		 * getDelcaredMethod自己声明的方法
		 */
			Method method = class1.getMethod("print", new Class[]{int.class,int.class} );
//			Method method2 = class1.getMethod("print", int.class,int.class);//也可以

			//方法的反射操作
		//	a.print(10, 20);//
			//方法的反射操作是用method对象来进行方法调用和al.print调用的效果一致
			//方法如果没有返回值null,有返回值返回具体的返回值
		//	method.invoke(a, new Object[]{10,20});//invoke:調用
			Object object = method.invoke(a, 10,20);//有几个参数就写几个,也可以的喔

			//
			System.out.println("===========================");
			//获取方法print(String,String)
			Method method2 = class1.getMethod("print", String.class,String.class);
			//用方法进行反射操作
//			a.print("hello", "world");
			object = method2.invoke(a, "HELLO","WORLD");

			//
			System.out.println("===========================");
//			Method method3 = class1.getMethod("print", new Class[]{});
			Method method3 = class1.getMethod("print");
//			method3.invoke(a, new Object[]{});
			method3.invoke(a);//沒有参数列表就不写,这个invoke方法本来就是可变参数的。。。
	}
}
class A{
	public void print(){
		System.out.println("无参数的print方法");
	}
	public void print(int a,int b){
		System.out.println(a+b);
	}
	public void print(String a,String b){
		System.out.println(a.toUpperCase()+","+b.toLowerCase());
	}
}

 

版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

刘继荣:不想当英雄,只想做那个坐在路边为英雄鼓掌的人

23号女儿女儿在班上,同学都管她叫23号。她班上总共有50个人,而每次考试,女儿都排名23。久而久之,便有了这个雅号,她也就成了名副其实的中等生。我们觉得这外号刺耳,女儿却欣然接受。老公发愁地说,一碰到公司活动,或者老同学聚会,别人都对自家的“小超人”赞不绝口,他却只能扮深沉。人家的孩子,不仅...

视频播放中,拖动进度条可以seek到相应视频帧

前言项目中需求:拖动进度条时,或是在进度条上方或是在屏幕中间,显示拖动进度条位置时刻的某一帧画面下面是参考文章一中提到(摘抄于)下面我想到的4个方案:1、在拖动过程中,可以通过TextureView来显示预览图,拖动进度条到某个position后,通过textureView.getBi...

Only the original thread that created

在service中回调时通知界面刷新了数据,就提示了如下异常:Only the original thread that created a view hierarchy can touch its views.翻译了一下:只有创建了视图层次结构的原始线程才能访问它的视图意思就是只有在主U...

冯骥才:青云楼主

青云楼主,海河边一小文人的号。嘛叫小文人?就是在人们嘴边绝对挂不上号,可提起他来差不多还都知道的那类文人。此君脸窄身簿,皮黄肉干,胳膊大腿又细又长,远瞧赛几根竹竿子上凉着的一张豆皮。但人不可貌相,海不可斗量。他能写能画,能刻图章,连托裱的事也行;可行家们说他——手糙了点儿。因故,天津卫的买卖没他写...

Android消息机制之二简介(2)

我们通过上一篇《Android消息机制Handler,Looper,Message,MessageQueue关系之一》知道,Android的消息机制必须将Handler,Looper,Message,MessageQueue一起“组织”起来,而且是缺一不可。比如在子线程中使用Handler必须先L...

Java Consumer的使用

前言今天有空整理一下Consumer<T> 接口的使用,一般用于回调中。这里简单记录一下。正文Consumer<T>接口是java 1.8才有的,定义如下://java.util.function.Consumer@FunctionalInterfacepu...