使用Java的反射功能调用类中的方法

最近一直在搞Java的反射,今天使用反射调用方法时出现了很多问题,主要是没有详细参考官方API。所以走了很多弯路。

所以想把这个例子记下来,供自己也供他人学习。

package com.mine.practice.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
  * 使用反射调用类中的方法
  * @author  2014-11-5 上午10:51:28
  * @version V1.0
  * @modify by user: {修改人} 2014-11-5
  * @modify by reason:{方法名}:{原因}
 */
public class User{

   /**用户名*/
   String name; 

   @SuppressWarnings("unused")
   public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{

	 //1、实例化对象
	 User user = new User();

	 //2、方法中需要的参数列表。单个参数时也可以直接使用String params = "Tom";
     String[] params = new String[]{"Tom"};

     //3.1需要参数的方法
     //第一个参数为方法的名字,第二个参数为方法参数的类型,单个参数时也可以直接写XXX.class或者写成数组的形式也可以。
     Method setMethod = (User.class).getMethod("setName",new Class[]{String.class});

     //调用setName方法,因为没有返回值,所以可以不用使用对象接收,如果接收了返回的也是null
     setMethod.invoke(user,params);

     //3.2不需要参数的方法
     //第一个参数为方法的名字,因为没有参数,所以只需要一个参数即可。
     Method getMethod = (User.class).getMethod("getName");

     //调用getName方法,因为有返回值,所以可以定义一个Object接收返回值。
     //注意invoke中的类即下面的user必须实例化,否则会抛出下面的异常的
     //java.lang.IllegalArgumentException: object is not an instance of declaring class

     Object object = getMethod.invoke(user);

     //打印使用反射方式获取方法的返回值
     System.out.println(object);

   }

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

  public String getName(){
	   return name;
  }
}
时间: 2024-10-26 02:49:59

使用Java的反射功能调用类中的方法的相关文章

Java通过反射机制修改类中的私有属性的值

首先创建一个类包含一个私有属性: class PrivateField{ private String username = "Jason"; } 通过反射机制修改username的值: //创建一个类的对象 PrivateField privateField = new PrivateField(); //获取对象的Class Class<?> classType = privateField.getClass(); //获取指定名字的私有域 Field field =

通过反射调用类中的方法

操作步骤: 1:实例化Class: 2:通过Class类的getMethod()方法取得一个Method的对象,并设置次方法操作时所需的参数类型: 3:使用invoke进行调用,并向方法中传递要设置的参数,但在使用invoke()方法时必须传入一个类的实例化对象 实例1:sayChina()方法中没有参数 package cn.itcast02; import java.lang.reflect.Method; //调用Person类中的sayChina()方法,没有参数 public clas

Java_通过反射调用类中的方法

先上一个基本的封装: /** * 获取classType * * @param type * @param provinceCode * @param cityCode * @return * @throws Exception */ public Class<?> getClassType(String type, String provinceCode, String cityCode, String suffix) throws Exception { Class<?> cl

通过Java的反射动态调用类的set和get方法

方法一: 1 public static void main(String[] args) throws Exception { 2 Class clazz = Class.forName("TaskProvidePropsList");//这里的类名是全名..有包的话要加上包名 3 Object obj = clazz.newInstance(); 4 Field[] fields = clazz.getDeclaredFields(); 5 //写数据 6 for(Field f

C#反射动态调用dll中的方法,并返回结果

//加载程序集(dll文件地址),使用Assembly类 Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "Bin/App_Code.dll"); //获取类型,参数(名称空间+类) Type type = assembly.GetType("assembly_name.assembly_class"); //创建该对象的实例,object类型,参数(名称空间

Java反射机制demo(五)—获得并调用一个类中的方法

这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和运行结果.获取所有的方法使用Class类中getMethos()方法. 待获取的类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 package

java 27 - 6 反射之 通过配置文件运行类中的方法

在以前,如果我们想要调用一个类中的方法,只能这样子: 例: 有Cat和Dog两个类,里面有eat和run两个成员方法: 1 public class Dog { 2 3 public void eat() { 4 System.out.println("狗吃肉"); 5 } 6 7 public void run() { 8 System.out.println("狗刨"); 9 } 10 } public class Cat { public void eat()

jsp中怎么调用java类中的方法

在jsp页面中先要,引入java类 例如: <%@page import="javabean.DbConn"%><!-- 引入包中的"类" --> <!--在用到的地方,直接对类实例化--> <% DbConn  DB=new  DbConn(); %> <!--然后就可以直接调用类中的方法--> <% Connection con=DB.conn(); %> jsp中怎么调用java类中的方法

int类中的方法

我们知道在python中,一切对象都是类,对象的方法都封装在类中,现在来探讨一下int类中的方法: 我们可以通过help(int)和dir(int)来查看int类中都封装了那些方法:     1.bit_length() def bit_length(self): # real signature unknown; restored from __doc__ """ """返回表示该数字的二进制最少位数""" int