反射的基本用法简例!

 

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制 。
 
例子:
首先先建一测试类代码如下:包和类名 com.test.MyTest
package com.test;
import com.sun.java_cup.internal.internal_error;
public class MyTest {
 private int num;
 public int getNum() {
  return num;
 }
 public void setNum(int num) {
  this.num = num;
 }
 public boolean ok;
 
 public int add(int a,int b) {
  return a + b;
  
 }
}
然后在另一个工程里用反射技术调用该类。
package com.app;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.sun.java_cup.internal.internal_error;


public class MyTestApp {
 public static void main(String[] args) throws NoSuchMethodException {
    try {
  Class typeClass = Class.forName(" com.logic.Test");// 绿色表示包和类名,要把该文件放在该工程下的lib文件夹下
   //取得方法名称
  Method []method = typeClass.getMethods();
  for(int i = 0;i<method.length;i++)
  {
   System.out.println(method[i].getName());
  }
  
   //取得公有属性名称
  Field []fields = typeClass.getFields();
  for(int i = 0;i<fields.length;i++){
   System.out.println(fields[i].getName());
  }
  
   //取得私有属性名称
  Field[]fields2 = typeClass.getDeclaredFields();
  for(int i = 0;i<fields2.length;i++){
   System.out.println(fields2[i].getName());
  }
  
   //动态实例化 调用方法
  Object object = typeClass.newInstance();
  //取得add方法(1)
  //Method addMethod = typeClass.getMethod("add", int.class,int.class);
  
  //取得add方法(2)
  for(int i = 0;i<method.length;i++){
   if(method[i].getName() == "add"){
    Method addMethod = method[i];
    Object res = addMethod.invoke(object, 34,67);
    System.out.println(res);
    break; 
   }
  }
   //public属性
  Field publicField = typeClass.getField("ok");
  publicField.setBoolean(object, true);
  Object object2 = publicField.get(object);
  System.out.println(object2);
   //private属性
  Method setMethod = typeClass.getMethod("setNum", int.class);// 第一个是函数名绿色表示参数类型,注意格式: 数据类型.class
  setMethod.invoke(object, 100);
  Method getMethod = typeClass.getMethod("getNum", null);
  Object object3 = getMethod.invoke(object, null);// 函数没有参数要赋空值
  System.out.println(object3);
  
 } catch (ClassNotFoundException e) {
  e.printStackTrace();
 } catch (InstantiationException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (IllegalAccessException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (SecurityException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (IllegalArgumentException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (InvocationTargetException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (NoSuchFieldException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值