1、getXXX 和 getDeclaredXXX

java 里 Class<?> 有下面这些方法:

类似的方法有:

2、getMethod(s) 和 getDeclaredMethod(s)

getDeclaredMethods只获取当前对象申明的方法,不包含继承过来的方法

* Returns an array containing {@code Method} objects reflecting all the
* declared methods of the class or interface represented by this {@code
* Class} object, including public, protected, default (package)
* access, and private methods, but excluding inherited methods.

getMethods获取public方法

* Returns an array containing {@code Method} objects reflecting all the
* public methods of the class or interface represented by this {@code
* Class} object, including those declared by the class or interface and
* those inherited from superclasses and superinterfaces.

以常用的getMethod和getDeclaredMethod为例:

public class DemoService {
public String showDemoPublic(String methodName) {
return "show demo " + methodName;
} protected String showDemoProtected(String methodName) {
return "show demo " + methodName;
} private String showDemoPrivate(String methodName) {
return "show demo " + methodName;
}
}

getMethods与getDeclaredMethods:

System.out.println("========================getMethods=========================");
Method[] methods_1 = demoService.getClass().getMethods();
for (Method m : methods_1) {
System.out.println(m);
} System.out.println("========================getDeclaredMethods=========================");
Method[] methods_2 = demoService.getClass().getDeclaredMethods();
for (Method m : methods_2) {
System.out.println(m);
}

========================getMethods=========================
public java.lang.String com.logback.demo.service.DemoService.showDemoPublic(java.lang.String)
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
========================getDeclaredMethods=========================
public java.lang.String com.logback.demo.service.DemoService.showDemoPublic(java.lang.String)
private java.lang.String com.logback.demo.service.DemoService.showDemoPrivate(java.lang.String)
protected java.lang.String com.logback.demo.service.DemoService.showDemoProtected(java.lang.String)

getMethod与getDeclaredMethod

public void getMethodByName(@RequestParam("method") String method) throws NoSuchMethodException {try {
System.out.println("========================getMethod=========================");
Method method1 = demoService.getClass().getMethod("showDemo" + method, String.class);
System.out.println(method1);
} catch (Exception ex) {
System.out.println(ex);
}
try {
  System.out.println("========================getDeclaredMethod=========================");
  Method method2 = demoService.getClass().getDeclaredMethod("showDemo" + method, String.class);
  System.out.println(method2);
} catch (Exception ex) {
  System.out.println(ex);
}
}

http://localhost:8088/getMethod?method=Public

========================getMethod=========================
public java.lang.String com.logback.demo.service.DemoService.showDemoPublic(java.lang.String)
========================getDeclaredMethod=========================
public java.lang.String com.logback.demo.service.DemoService.showDemoPublic(java.lang.String)

http://localhost:8088/getMethod?method=Protected

========================getMethod=========================
java.lang.NoSuchMethodException: com.logback.demo.service.DemoService.showDemoProtected(java.lang.String)
========================getDeclaredMethod=========================
protected java.lang.String com.logback.demo.service.DemoService.showDemoProtected(java.lang.String)

http://localhost:8088/getMethod?method=Private

========================getMethod=========================
java.lang.NoSuchMethodException: com.logback.demo.service.DemoService.showDemoPrivate(java.lang.String)
========================getDeclaredMethod=========================
private java.lang.String com.logback.demo.service.DemoService.showDemoPrivate(java.lang.String)

2、getField(s) 和 getDeclaredField(s)

public class Demo {
  private Integer id;
  private String name;
  public String desc;
} public class StudentDemo extends Demo {
  private Integer age;
  private Integer sex;
}

验证getField和getDeclareField

        for (Field field : demo.getClass().getDeclaredFields()) {
System.out.println(field);
}
System.out.println(">>>>>>>>");
for (Field field : demo.getClass().getFields()) {
System.out.println(field);
}
System.out.println("==========================================="); for (Field field : student.getClass().getDeclaredFields()) {
System.out.println(field);
}
System.out.println(">>>>>>>>");
for (Field field : student.getClass().getFields()) {
System.out.println(field);
}

getDeclaredField获取所有申明的属性,不包含继承来的属性。

getFields获取所有public的属性,包含继承来的属性。

private java.lang.Integer com.logback.demo.common.Demo.id

private java.lang.String com.logback.demo.common.Demo.name

public java.lang.String com.logback.demo.common.Demo.desc

>>>>>>>>

public java.lang.String com.logback.demo.common.Demo.desc

===========================================

private java.lang.Integer com.logback.demo.common.StudentDemo.age

private java.lang.Integer com.logback.demo.common.StudentDemo.sex

>>>>>>>>

public java.lang.String com.logback.demo.common.Demo.desc

 

java反射 - getXXX 与 getDeclaredXXX的更多相关文章

  1. Java Reflection(getXXX和getDeclaredXXX)

    package com.sunchao.reflection; public class Person { private int age ; private String name; public ...

  2. 浅析Java反射机制

    目前,在项目中使用Java反射机制(除Spring框架)的地方不多,但为后续准备,简单将最近的反射体会总结如下: 1. 按光学中的反射,可以将java中的反射理解为“镜像”.有以下用途: Java反射 ...

  3. 【java】java反射初探 ——“当类也照起镜子”

    反射的作用   开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解) 我理解的java反射机制就是: 提供一套完善而强大的API ...

  4. 【java】java反射初探 ——“当类也学会照镜子”

    反射的作用   开门见山地说说反射的作用   1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解哈)   我理解的java反射机制就是: 提供一套完善而强 ...

  5. Java反射初探 ——“当类也学会照镜子”

    反射的作用 开门见山地说说反射的作用   1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解哈)   我理解的java反射机制就是: 提供一套完善而强大的 ...

  6. 有关java反射的几个小方法的作用和区别

    1.Class类中 getXXX()和getDeclaredXXX()的作用和区别: 前者获取某个类的所有公共(public)的字段(or方法or构造函数),包括父类.后者获取所有的字段(or方法or ...

  7. 不藏了,这些Java反射用法总结都告诉你们

    摘要:Java反射是一种非常强大的机制,它可以在同一个系统中去检测内部的类的字段.方法和构造函数.它非常多的Java框架中,都大量应用了反射技术,如Hibernate和Spring.可以说,反射机制的 ...

  8. Java反射机制深入研究

    ava 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”.   在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? ...

  9. java 反射 动态代理

    在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...

随机推荐

  1. typecho与wordpress

    相信玩博客的人对这两个程序会相当熟悉把. 有些人玩了很久WP之后又转向了typecho 之后又回到wp.举个例子typecho犹如一个美丽的裸体女人.wp就是一个穿着绫罗绸缎的女人. 当你看着裸体一天 ...

  2. Tomcat----->tomcat配置虚拟主机(搭建网站)mac

    1.首先在server.xml中添加HOST <Host name="www.snowing.com" appBase="/Users/snowing/Downlo ...

  3. HDU_5533_Dancing Stars on Me

    Dancing Stars on Me Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Ot ...

  4. cpuspeed和irqbalance服务器的两大性能杀手

    启用 irqbalance 服务,既可以提升性能,又可以降低能耗. irqbalance 用于优化中断分配,它会自动收集系统数据以分析使用模式,并依据系统负载状况将工作状态置于 Performance ...

  5. Spark 源码分析 -- Stage

    理解stage, 关键就是理解Narrow Dependency和Wide Dependency, 可能还是觉得比较难理解 关键在于是否需要shuffle, 不需要shuffle是可以随意并发的, 所 ...

  6. 服务器端Session和客户端Session(和Cookie区别)2

    https://blog.csdn.net/java_faep/article/details/78082802 我们可以得出如下结论: 关闭浏览器,只会是浏览器端内存里的session cookie ...

  7. Centos7下实现免密码登录

    一.生成密钥 [root@master ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to sa ...

  8. URL地址中的字符串转换

    url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,怎么解决?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它 ...

  9. luarocks安装以及lfs安装

    一.先安装lua: brew install lua 我本机的安装路径为:/usr/local/Cellar/lua/5.3.4_2 二.安装luarocks 下载luarocks的安装包: http ...

  10. 基于Django的乐观锁与悲观锁解决订单并发问题的一点浅见

    订单并发这个问题我想大家都是有一定认识的,这里我说一下我的一些浅见,我会尽可能的让大家了解如何解决这类问题. 在解释如何解决订单并发问题之前,需要先了解一下什么是数据库的事务.(我用的是mysql数据 ...