文档章节

java类反射之method

Nick_Judy
 Nick_Judy
发布于 2015/10/04 22:15
字数 524
阅读 11
收藏 0

    上一篇通过Class可以获取一个类的类模板了并且可以通过类模板成功的创造出了对象,但是止步于此是没有意义的因为单纯的拿到对象而不去做具体的事对一个对象来说它是很伤心的,下面就看看怎么能取得method来让我们的对象做具体的事。

    写一个student类,它有两个方法 一个是say()方法 一个是run方法

public class Student {

	public String say(String words){
		System.out.println("这位同学说了:"+words);
		return words;
	}
	
	public void run(int distance){
		System.out.println("这位同学跑了:"+distance+"km");
	}
	
}

    我们可以通过Method这个类来获取Student中方法的模板

public class Test {
	public static void main(String[] args) {
		try {
			Class clazz=Class.forName("com.tl.referce.Student");
			System.out.println("method:");
			Method methods1[]=clazz.getMethods();
			for (Method method : methods1) {
				System.out.print(method.getName()+"\t");
			}
			System.out.println();
			System.out.println("declare methods:");
			Method methods2[]=clazz.getDeclaredMethods();
			for (Method method : methods2) {
				System.out.print(method.getName()+"\t");
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
	}
}

    输出结果是:

    method:

    run say wait wait wait equals toString hashCode getClass notify notifyAll

    declare methods:

    run say

    从输出结果上可以看出clazz.getMethods()这个方法他获取的是该类的所有方法包含了从父类继承的方法,而clazz.getDeclaredMethods()这个方法只获取它自己的方法而不包含从父类继承的方法

    那么我们现在获取到了类的方法的模板,那么怎么才能执行该类的方法呢?

public class Test {
	public static void main(String[] args) {
		try {
			Class clazz=Class.forName("com.tl.referce.Student");
			Method methods1[]=clazz.getMethods();
			System.out.println();
			Method methods2[]=clazz.getDeclaredMethods();
			
			try {
				Student student1=(Student) clazz.newInstance();
				Method method=clazz.getDeclaredMethod("say", new Class[]{String.class});
				method.invoke(student1, "hello world");
			} catch (InstantiationException e1) {
				e1.printStackTrace();
			} catch (IllegalAccessException e1) {
				e1.printStackTrace();
			} catch (NoSuchMethodException e) {
				e.printStackTrace();
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
	}
}
    我们通过 Method method=clazz.getDeclaredMethod("say", new Class[]{String.class});来获取clazz中一个名叫say的方法的method模板然后通过method的invoke方法来执行student的say方法,当然还需要传递两个参数,第一个参数说明你需要执行的是那个对象中的方法,第二个参数是为你要执行的方法传递对应的参数。


© 著作权归作者所有

Nick_Judy
粉丝 4
博文 8
码字总数 3423
作品 0
深圳
程序员
私信 提问
黑马程序员--JDK1.5新特性(二)

----------------------android培训、java培训、期待与您交流!---------------------- Java反射机制定义: Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性、方法...

长平狐
2013/07/01
62
0
老司机带你深入浅出Java反射

反射,它就像是一种魔法,引入运行时自省能力,赋予了 Java 语言令人意外的活力,通过运行时操作元数据或对象,Java 可以灵活地操作运行时才能确定的信息 这里笔者就深入浅出总结下Java反射,...

小刀爱编程
2018/11/07
138
0
Java反射机制

问题: 在运行时,对一个JAVA类,能否知道属性和方法;能否调用它的任意方法? 答案是可以的,JAVA提供一种反射机制可以实现。 目录 什么是JAVA的反射机制 JDK中提供的Reflection API JAVA反...

长平狐
2012/08/29
603
0
Java面试基础篇——第十篇:反射的原理

什么是Java的反射机制?指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。对于任意一个对象,都能调用它的任意一个方法。这种动态获取信息,以及动态调用对象方法的功能叫Jav...

developlee的潇洒人生
2018/07/24
160
0
Java Class对象与反射机制

原文链接:https://blog.csdn.net/huaxun66/article/details/77991736 Java Class对象 RTTI RTTI(Run-Time Type Identification)运行时类型识别,其作用是在运行时识别一个对象的类型和类的...

一叶飘舟
08/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

自建redis笔记

自建redis笔记 最近在linux安装了一下redis,特做一些笔记! 本文先单节点启动redis,然后再进行持久化配置,在次基础上,再分享搭建主从模式的配置以及Sentinel 哨兵模式及集群的搭建 单节点...

北极之北
28分钟前
4
0
vue+element之多表单验证

方法一:利用promise var p1=new Promise(function(resolve, reject) { this.$refs[form1].validate((valid) => { if(valid){ ......

沉迷代码我爱学习
30分钟前
4
0
golang 1.13 errors 包 新函数介绍

引 这次 errors 包算重量级更新。很有更能把以前的一些设计模式给推到。下面聊下用法。 error 装包 以前返回一个错误,想要保存 error 链,还要定义结构体保存以前的 error 信息。感兴趣看下...

guonaihong
39分钟前
55
1
并发编程之线程池

一、线程池 1、什么是线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序 都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 第一:降...

codeobj
41分钟前
6
0
知识点总结思维导图模板分享,良心安利,建议收藏

思维导图经常被用在学习中,对大脑思维进行发散,对知识进行记忆。使用思维导图可以让知识更加简单更有层次。下面是利用思维导图所绘制的几款知识点总结思维导图模板,大家可以进行进行参考使...

干货趣分享
45分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部