您的位置:首页 > 编程语言 > Java开发

Java进阶(极客)——反射机制(三)Method 对象的机制与实现

2015-06-30 10:03 609 查看
1、Method对象概述:

1.1java.lang.reflect.Method,是用于表示类中,接口中方法对象的类

1.2可以操作类中私有以及共有等全部方法

2、Method对象的常用方法

getName();//获得方法名称

getReturnType();//获得方法返回值类型

invoke(Object obj, Object...args);//利用obj对象调用该方法

getParameterTypes();//获得方法所有参数类型,按照顺序返回Class数组

getDeclaredAnnotations();//获取方法全部注解



MethodTest:

package com.zhh.fanshe.main;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import com.zhh.fanshe.domain.Book;

/**
* Method 对象的机制与实现
*
*
*/
public class MethodTest {

public static void main(String[] args) {
Book book = new Book();

//show(book);

showUse1(book);//打印getName方法被调用了

showUse2(book);
System.out.println(book.getName());//打印getName方法被调用了   西游记

showUse3(book);//打印 哈哈12

}

/**该方法用于获取对象的所有方法名称、返回值类型、以及参数信息
*
*
*/
public static void show(Object ob) {
Class cl = ob.getClass();
Method[] me = cl.getDeclaredMethods();
for (Method mm : me) {
System.out.println("方法名称:" + mm.getName());
System.out.println("方法修饰符:" + Modifier.toString(mm.getModifiers()));
System.out.println("方法返回值类型:" + mm.getReturnType());
Class[] preType = mm.getParameterTypes();
System.out.println("方法参数列表:");
for (Class cll : preType) {
System.out.println(cll.getName());
}

}
}

/**该方法用于使用传递过来的实体对象 获取其中的方法 并调用
*
*
*
*/
public static void showUse1(Object ob) {
try {
/*方法名称:getName,没有参数
*
*/
Class cl = ob.getClass();
Method me = cl.getMethod("getName", null);//获取一个无参的方法对象
me.invoke(ob, new Object[0]);//调用getName方法

} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 该方法用于使用传递过来的实体对象 获取其中的方法 并调用
*
*
*
*/
private static void showUse2(Object ob) {

try {
/*方法名称:setName,参数类型String
*
*/
Class c2 = ob.getClass();
Method me1 = c2.getMethod("setName", String.class);
me1.invoke(ob, "西游记");//调用setName方法
} catch (Exception e) {
e.printStackTrace();

}
}

/**
* 该方法用于使用传递过来的实体对象 获取其中的方法 并调用
*
*
*
*/
private static void showUse3(Object ob) {
/*方法名称:setName,参数类型String,int
*
*/
try {
Class c3 = ob.getClass();
Class[] cll = { String.class, int.class };
Method me2 = c3.getMethod("test", cll);//获取一个2个参数的方法对象
Object[] obb = { "哈哈", 12 };
me2.invoke(ob, obb);//调用test方法

} catch (Exception e) {
e.printStackTrace();
}

}
}


Book:

package com.zhh.fanshe.domain;

public class Book {
public int     id;
private String name;
private String type;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
System.out.println("getName方法被调用了");
return name;
}

public void setName(String name) {
this.name = name;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public void test(String name, int i) {
System.out.println(name);
System.out.println(i);

}

}


源码下载:

http://download.csdn.net/detail/zhaihaohao1/8852965

参考视频:

http://www.jikexueyuan.com/course/530.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: