第三十二章 反射的更多细节

转载 2012年03月23日 23:50:30

通过一个类,创造这个类的实例

通过一个类,查找这个类的方法

通过一个类,查找这个类的属性


package cn.itcast.jdbc;

import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;




public class ReflectTest {
	public static void main(String[] args)throws Exception{
		Class clazz = User.class;
		Object obj = create(clazz);
		System.out.println(obj);
		
		invoke1(obj,"getId");  //作用?
		field(clazz);   //输出 id name birthday money 这些类的属性
	}
	
	/*通过一个类,创造出一个实例*/
	static Object create(Class clazz)throws Exception{
		Constructor con = clazz.getConstructor(String.class);
		Object obj = con.newInstance("test name");
		return obj;
	}
	
	/*通过类的方法名,调用这个类的方法*/
	static void invoke1(Object obj, String methodName) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException {
		//Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息
		Method[] ms = obj.getClass().getDeclaredMethods(); //包括私有方法,不包括公共方法
		ms = obj.getClass().getMethods(); //不包括私有方法,包括公共方法
		for(Method m : ms){
			System.out.println(m.getName());
			if(methodName.equals(m.getName())){
				m.invoke(obj, null);
			}
		}
		Method m = obj.getClass().getMethod(methodName,null);
		m.invoke(obj, null);
	}
	
	//查找某个类的属性
	static void field(Class clazz) throws Exception{
		Field[] fs = clazz.getDeclaredFields();
		//fs = clazz.getFields();
		for(Field f : fs){
			System.out.println(f.getName());
		}
	}
	
	//?
	static void annon(Class clazz) throws Exception{
		Annotation[] as = clazz.getAnnotations(); 
	}
	
}




相关文章推荐

Operating Systems: Three Easy Pieces(操作系统:三个简单方面)4.3进程创建的更多细节

4.3进程创建:更多的细节 首先我们要揭秘的是,程序是怎样转换为进程的。尤其是,操作系统怎么得到一个程序并将之运行?进程创建实际上是怎么作用的? 操作系统想要允许程序时,最先要做的事情就是将程序的代码...

Google演示蜂巢系统的更多底层细节

Google演示蜂巢系统的更多底层细节上网日期: 2011年03月11日  已有[ 5 ]个评论   打印版  发送查询 订阅关键字: 蜂巢  Android 3.0  开源移动操作系统  Xoom平...

The Linux Programming Interface 05 File I/O: Further Details 文件I/O的更多细节

The Linux Programming Interface File I/O: Further Details (01) 原子操作 Atomicity is essential to the su...
  • WAN_EXE
  • WAN_EXE
  • 2017年03月06日 14:27
  • 190

3.关于Tornado handler的更多细节 (副标题:一些要注意的问题)

实际上handler有很多讲究,在Application类的注释中,就讲了不少。 1. 首先,(regexp,tornado.web.RequestHandler)中的第一个参数不是普通的字符串...

Java——第四章——类与对象之类的更多细节

一. 从方法返回值 方法语句执行完时,会到达一个 return 语句,或抛出异常;不管哪种情形,都会返回调用该方法的代码。方法声明中可以声明方法的返回类型。在方法体内使用 return 语句返回值。...

Ice的更多细节

2010-01-12 20:48 669人阅读 评论(0) 收藏 举报 ICE的整体架构 服务器端: 服务器端通常只有一个通信器(Ice::Communicator),通信器包含...

ggplot系列2-更多画图细节——坐标轴和图例

ggplot更多画图细节——坐标轴和图例 Date: 2013.10.5 Author: duqi.yc@taobao.com 1、不同Data Set数据在同一图中展示 假设x 是包含4190...
  • duqi_yc
  • duqi_yc
  • 2013年10月07日 00:05
  • 38674

关于Tornado handler的更多细节

实际上handler有很多讲究,在Application类的注释中,就讲了不少。 1. 首先,(regexp,tornado.web.RequestHandler)中的第一个参数不是普通的字符串...

几个date,socket,和反射的例子

  • 2013年08月07日 20:57
  • 39KB
  • 下载

反射的小例子

  • 2013年04月08日 20:44
  • 22KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第三十二章 反射的更多细节
举报原因:
原因补充:

(最多只允许输入30个字)