java反射实例

 首先建立一个包com.en

User类源代码


 

package com.en;

public class User {
   /*
    * 默认无参构造函数
    */
 public User(){
  
 }
 private String[]subject; //科目
 public int age;//年龄
 /*
  * 带参数的构造函数,userName为用户名
  */
 public User(String userName){
  this.userName=userName;
 }
 private String userName; //用户名
    /*
    * 获取用户名
    */
 public String getUserName() {
  return userName;
 }
 /*
  * 设置用户名
  */
 public void setUserName(String userName) {
  this.userName = userName;
 }
    /*
     * 输出用户名
     */
 public void printUser() {
  System.out.println("user name is " + this.userName);
 }
 public void printAge(){
  System.out.println("age is "+this.age);
 }
 /*
  * 获取科目
  */
    public String[] getSubject() {
  return subject;
 }
    /*
     * 设置科目
     */
 public void setSubject(String[] subject) {
  this.subject = subject;
 }
 public void printSubject(){
  System.out.print("subject is ");
  for(int i=0;i<subject.length;i++){
   if(i==0){
    System.out.print(subject[i]);
   }else{
    System.out.print(","+subject[i]);
   }
  }
  System.out.println();
 }
 /*
     * main方法
     */
 public static void main(String[] args) {
        System.out.println(" Main method is running!");
 }

}
******************************************************************************

TestRefect类用于动态调用User


package com.en;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Array;

public class TestRefect {


 public static void main(String[] args) {
  
  Object obj=null;
  Class cls=null;
  try {
            //动态创建对象,使用包名+类名的完整组合,创建出User对象
   cls=Class.forName("com.en.User");
   Constructor cons= cls.getConstructor(new Class[]{String.class});
   //调用构造方法创建对象 
   obj=cons.newInstance(new Object[]{"world"});
   Method md_print=cls.getDeclaredMethod("printUser",null);
   //调用User类的printUser方法,打印 user的名称
   md_print.invoke(obj,null);
   //修改userName,调用set方法
   System.out.println("调用setUserName后的结果");
   Method md_set=cls.getDeclaredMethod("setUserName",new Class[]{String.class});
      md_set.invoke(obj,new Object[]{"test"});
      //打印结果
      md_print.invoke(obj,null);
      //设置age属性,
      System.out.println("设置年龄为22");
      Field fd_age=cls.getDeclaredField("age");
      fd_age.setInt(obj,22);
      //打印年龄
      Method md_printAge=cls.getDeclaredMethod("printAge",null);
      md_printAge.invoke(obj,null);
      //获取一维String数组类型
      Object arrStrObj=Array.newInstance(String.class,new int[]{1,2});
      Class arrStrType=arrStrObj.getClass().getComponentType();
      //设置科目
      Method md_set_subj=cls.getDeclaredMethod("setSubject",new Class[]{arrStrType});
      md_set_subj.invoke(obj,new Object[]{new String[]{"chinese","math","english"}});
      //打印科目
      Method md_print_subj=cls.getDeclaredMethod("printSubject",null);
      md_print_subj.invoke(obj,null);
      //调用main方法
      Method md_main=cls.getDeclaredMethod("main",new Class[]{arrStrType});
      md_main.invoke(obj,new Object[]{null});
  } catch(Exception e){
   e.printStackTrace();
  }  
 }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值