public Method[] getMethods()返回某个类的所有公用(public)方法包括其继承类的公用方法,当然也包括它所实现接口的方法。
public Method[] getDeclaredMethods()对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当然也包括它所实现接口的方法。

 public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, InstantiationException  {
Bean bean = new Bean("QQ", 18);
System.out.println(bean); //使用反射
String className = "com.my.test.Bean"; Class<Bean> clas = (Class<Bean>) Class.forName(className); //生成一个实例
Bean b = (Bean)clas.newInstance();
b.setAge(20);
b.setName("WW");
System.out.println(b); //调用方法
clas.getMethod("setName", String.class).invoke(bean, "Jerry");
clas.getMethod("setAge", int.class).invoke(bean, 25);
System.out.println("After reflection....\n" + bean);
}

【转】使用反射动态执行方法例子:

java利用反射动态执行类方法
Person类
public class Person {
String name;
String day;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDay() {
return day;
}
public void setDay(String day) {
this.day = day;
}
public void printlinfo() throws RuntimeException, IOException{
System.out.println(name);
System.out.println(day);
String url="http://www.163.com";
openURL(url); }
public void openURL (String url)throws RuntimeException,IOException{
String urlx=null;
urlx="rundll32 url.dll,FileProtocolHandler "+url; Process p=Runtime.getRuntime().exec(""+urlx); } } 利用反映动态执行类的方法
public static void print(byte[] b1,String tname,String tday) throws InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException { MyClassLoade myClassLoader=new MyClassLoade();
Class c = myClassLoader.defineClass("Person", b1);
System.out.println(c.getName());
Object object= c.newInstance();
Field[] fields=c.getDeclaredFields();
System.out.println(fields.length);
String args="java.lang.String";
Method method1= c.getDeclaredMethod("setName", args.getClass()) ;
method1.invoke(object,new Object[] {tname});
Method method2= c.getDeclaredMethod("setDay", args.getClass()) ;
method2.invoke(object,new Object[] {tday});
Method method = c.getDeclaredMethod("printlinfo", null) ;
method.invoke(object); } 参考:利用反射实现JavaBean的自动赋值
import java.lang.reflect.Method;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import com.sns.exception.ApplicationException;
public final class ParameterUtil {
public static void setFormBean(HttpServletRequest request, Object bean) {
Class c = bean.getClass();
Method[] ms = c.getMethods();
for(int i=0; i<ms.length; i++) {
String name = ms.getName();
if(name.startsWith("set")) {
Class[] cc = ms.getParameterTypes();
if(cc.length==1) {
String type = cc[0].getName(); // parameter type
try {
// get property name:
String prop = Character.toLowerCase(name.charAt(3)) + name.substring(4);
// get parameter value:
String param = getString(request, prop);
if(param!=null && !param.equals("")) {
//ms.setAccessible(true);
if(type.equals("java.lang.String")) {
ms.invoke(bean, new Object[] {param});
}
else if(type.equals("int") || type.equals("java.lang.Integer")) {
ms.invoke(bean, new Object[] {new Integer(param)});
}
else if(type.equals("long") || type.equals("java.lang.Long")) {
ms.invoke(bean, new Object[] {new Long(param)});
}
else if(type.equals("boolean") || type.equals("java.lang.Boolean")) {
ms.invoke(bean, new Object[] { Boolean.valueOf(param) });
}
else if(type.equals("java.util.Date")) {
Date date = DateUtil.parseDateTime(param);
if(date!=null)
ms.invoke(bean, new Object[] {date});
}
}
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}
}
}
每当发现JavaBean中的setXxx()方法时,便自动寻找表单的对应字段xxx,如果找到,就利用反射调用此方法,将对应的字段值赋给JavaBean。
由于表单传递的变量名和值全部是字符串,因此需要做某些转换。目前,该程序能处理的数据类型包括:boolean,Boolean,int,Integer,long,Long,Date,不被支持的数据类型被自动忽略。你也可以很方便地添加新的类型。
请 注意,只有public的set方法能够被调用。如果你希望private或protected的set方法也能被调用,请将红色标识的 getMethods()改为getDeclaredMethods(),以便获得包括private和protected在内的所有方法,并将 ms.setAccessible(true);的注释去掉,以便能正确调用private和protected方法。
反射是Java语言非常强大的功能,但是由于反射会破坏对象封装,并且反射调用的速度较慢,因此,只能在必要的工具类中使用。

反射中getMethods 与 getDeclaredMethods 的区别的更多相关文章

  1. Java反射中getDeclaredField和getField的区别

    getDeclaredField是可以获取一个类的所有字段. getField只能获取类的public 字段. public Field getDeclaredField(String name) t ...

  2. JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别

    JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别   关于获取类的字段有两种方式:getFields()和getDeclaredFields().我们先来 ...

  3. 反射中Class.forName()和classLoader的区别

    搞清楚两者之间区别前,我们来了解下类加载过程. 一.类加载过程 1.加载 通过一个类的全限定名来获取定义此类的二进制字节流. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构. 在内存中生 ...

  4. 在Java的反射中,Class.forName和ClassLoader的区别

    前言 最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别.当时没有想出来后来自己研究了一下就写下来记录一下. 解释 在java中Cl ...

  5. [转]JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别

    关于获取类的字段有两种方式:getFields()和getDeclaredFields().我们先来看看这两者的区别吧: getFields():获得某个类的所有的公共(public)的字段,包括父类 ...

  6. java中Class.getMethods()和Class.getDeclaredMethods()的区别

    在java中,可以根据Class类的对象,知道某个类(接口)的一些属性(成员 ,方法,注释,注解)等.由于最近的工作中用到了这些,其中需要在代码中格局反射知道某些类的方法,查看文档的时候,看到了get ...

  7. java反射中Method类invoke方法的使用方法

    package com.zsw.test; import java.lang.reflect.Method;import java.lang.reflect.InvocationTargetExcep ...

  8. C#中 反射中的Assembly(装载程序集):

    反射中的Assembly(装载程序集):可以通过Assembly的信息来获取程序的类,实例等编程需要用到的信息.  String assemblyName = @"NamespaceRef& ...

  9. 使用C#反射中的MakeGenericType函数,来为泛型方法和泛型类指定(泛型的)类型

    C#反射中的MakeGenericType函数可以用来指定泛型方法和泛型类的具体类型,方法如下面代码所示这里就不多讲了,详情看下面代码一切就清楚了: using System; using Syste ...

随机推荐

  1. CocoaPods的安装(图文并茂)OS X 10.11 系统

    这里是前言,可以跳过前言部分直接跳到后面"这里正式安装"开始看步骤: 系统:OS X EI Capitan 版本:10.11.2 开发工具:XCode:7.2 先给一个挺不错的关于 ...

  2. jhljx跑跑跑(找规律)

    题目来源:https://biancheng.love/contest/41/problem/D/index jhljx跑跑跑 题目描述 数学不好的jhljx又在和别人打牌,他们一共m人每人n张牌,牌 ...

  3. mysql中FIND_IN_SET的使用方法

    在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,这时候mysql的FIND_IN_ ...

  4. redis高可用之REDIS SENTINEL

    1. Redis主从配置 1.1. 设置主从复制 Master <= Salve 10.24.6.5:6379 <= 10.24.6.7:6379 1.2.   取消主从复制 1.3.   ...

  5. Mysql中的视图

    什么是视图 通俗的讲,视图就是一条SELECT语句执行后返回的结果集.所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上. 视图的特性 视图是对若干张基本表的引用,一张虚表,查询语句执 ...

  6. Effective Java 08 Obey the general contract when overriding equals

    When it's the case that each instance of the class is equal to only itself. 1. Each instance of the ...

  7. Spring中Template模式与callback的结合使用浅析

    Spring不论是与ibatis,还是与Hibernate的结合中,都使用到了Template模式与callback技术,来达到简化代码实现的目的.Template模式也即模板模式,用于对一些不太变化 ...

  8. 设计模式C#实现(三)——外观模式

    外观模式——提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口让子系统更容易使用. 一个外观包含了为许多对象和对他们的操作,使得重复这些操作更方便. 假如客厅里有灯(Lights ...

  9. hbase shell 常用命令

    进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成功之 ...

  10. POJ 2513 Colored Sticks(欧拉回路,字典树,并查集)

    题意:给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的.   无向图存在欧拉路的充要条件为: ①     图是连通的: ②     所有节 ...