java反射 Method
生活随笔
收集整理的這篇文章主要介紹了
java反射 Method
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
java反射 Method
獲取字節碼文件對象
Class c = Class.forName("fieldtest.Student");通過無參構造方法創建對象obj
Constructor con = c.getConstructor(); Object obj = con.newInstance();Method m1 = c.getMethod(“study”);獲取study方法
m1.invoke(obj);使用obj對象的m1方法
如果要用私有方法:
Method m2 = c.getDeclaredMethod(“study”, String.class);
在使用invoke執行私有方法之前,要取消對這個方法的訪問檢查
m2.setAccessible(true);
m2.invoke(obj, “數學”);
一些api的內容:
public Method getMethod(String name,Class<?>... parameterTypes) //第一個參數表示的方法名,第二個參數表示的是方法的參數的class類型 /*Returns a Method object that reflects the specified public member method of the class or interface represented by this Class object. The name parameter is a String specifying the simple name of the desired method. The parameterTypes parameter is an array of Class objects that identify the method's formal parameter types, in declared order. If parameterTypes is null, it is treated as if it were an empty array.*/ public Object invoke(Object obj,Object... args) /*參數: - obj:調用方法的對象 - args:為指定方法傳遞的參數值,是一個可變參數 - 返回值:為動態調用指定方法后的實際返回值 */例子:
package fieldtest;public class Student {// 成員變量public String name;// 公共private int age;// 私有// 構造方法public Student() {super();// TODO Auto-generated constructor stub}// 私有構造方法private Student(String name) {this.name = name;}public Student(String name, int age) {super();this.name = name;this.age = age;}// 成員方法(getXxx/setXxx)public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}// 成員方法public void study() {System.out.println("我愛學習java!");}// 私有private void study(String string) {System.out.println("我還愛學習" + string);}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";} } package fieldtest;import java.lang.reflect.Constructor; import java.lang.reflect.Method;public class MethodDemo {public static void main(String[] args) throws Exception {// 獲取字節碼文件對象Class c = Class.forName("fieldtest.Student");// 獲取所有的方法System.out.println("公共方法:");Method[] methods = c.getMethods(); // 獲取自己的包括繼承父親的公共方法for (Method method : methods) {System.out.println(method);}System.out.println("所有方法:");Method[] methods1 = c.getDeclaredMethods(); // 獲取自己的所有的方法for (Method method : methods1) {System.out.println(method);}Constructor con = c.getConstructor();Object obj = con.newInstance();// 獲取單個方法并使用// public Method getMethod(String name,Class<?>... parameterTypes)// 第一個參數表示的方法名,第二個參數表示的是方法的參數的class類型Method m1 = c.getMethod("study");// public Object invoke(Object obj,Object... args)// 返回值是Object,第一個參數表示對象是誰,第二參數表示調用該方法的實際參數m1.invoke(obj); // 調用obj對象的m1方法System.out.println("----------");Method m2 = c.getDeclaredMethod("study", String.class);// NoSuchMethodException 訪問私有方法 暴力訪問m2.setAccessible(true);m2.invoke(obj, "數學");} }/* 公共方法: public java.lang.String fieldtest.Student.toString() public java.lang.String fieldtest.Student.getName() public void fieldtest.Student.setName(java.lang.String) public void fieldtest.Student.setAge(int) public int fieldtest.Student.getAge() public void fieldtest.Student.study() public final void java.lang.Object.wait() throws java.lang.InterruptedException public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException public boolean java.lang.Object.equals(java.lang.Object) public native int java.lang.Object.hashCode() public final native java.lang.Class java.lang.Object.getClass() public final native void java.lang.Object.notify() public final native void java.lang.Object.notifyAll() 所有方法: public java.lang.String fieldtest.Student.toString() public java.lang.String fieldtest.Student.getName() public void fieldtest.Student.setName(java.lang.String) public void fieldtest.Student.setAge(int) public int fieldtest.Student.getAge() private void fieldtest.Student.study(java.lang.String) public void fieldtest.Student.study() 我愛學習java! ---------- 我還愛學習數學 */總結
以上是生活随笔為你收集整理的java反射 Method的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 传感器信号处理仿真实验(c语言实现),均
- 下一篇: python csv文件复制时的编码问题