使用反射調用方法

一、實體類java

package com.ljb.app.model;app

import java.io.Serializable;maven

/**
 * 序列化實體類
 * @author  LJB
 * @version  2015年2月10日
 */
public class Student implements Serializable{
 private String name;
 private int age;
 private String gender;
 private transient String password;
 
 public Student () {};
 
 public Student(String name, int age, String gender , String password) {
  super();
  this.name = name;
  this.age = age;
  this.gender = gender;
  this.password = password;
 }ide

 public String getName() {
  return name;
 }this

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

 public int getAge() {
  return age;
 }.net

 public void setAge(int age) {
  this.age = age;
 }對象

 public String getGender() {
  return gender;
 }get

 public void setGender(String gender) {
  this.gender = gender;
 }it

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 @Override
 public String toString() {
  return "Student [name=" + name + ", age=" + age + ", gender=" + gender
    + "]";
 }
}

二、調用get方法

package com.ljb.app.my_first_maven;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import com.ljb.app.model.Student;

/**
 * 利用反射調用方法
 * @author  LJB
 * @version  2015年3月2日
 */
public class MethodCallTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // 建立實例對象
  Student stu = new Student();
  stu.setName("張三");
  
  // 利用反射調用get方法
  Class cla = Student.class;
  
  try {
   // 獲取名稱爲getName的方法
   Method meth = cla.getMethod("getName", null);
   
   // 調用指定對象的該方法,獲取name值
   try {
    String name = (String) meth.invoke(stu, null);
    
    System.out.println(name);
   } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  } catch (SecurityException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NoSuchMethodException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  

 }

}

運行結果:張三

三、調用set方法

package com.ljb.app.my_first_maven;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import com.ljb.app.model.Student;

/**
 * 利用反射調用方法
 * @author LJB
 * @version 2015年3月2日
 */
public class MethodCallTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // 建立實例對象
  Student stu = new Student();
  stu.setName("張三");
  
  // 獲取Class類對象

  Class cla = Student.class;
    
  // 利用反射調用set方法
  try {
   // 獲取方法
   Method setMeth = cla.getMethod("setName", String.class);
   
   // 調用方法,傳入參數
   setMeth.invoke(stu, "李四");
   
   String name = stu.getName();
   System.out.println(name);
  } catch (IllegalArgumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SecurityException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NoSuchMethodException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

}

運行結果:李四
四、若是是private方法

使用setAccessible(Boolean flag)

true 爲取消權限; false 爲實施權限檢查

相關文章
相關標籤/搜索