java反射 - getXXX 与 getDeclaredXXX
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的更多相关文章
- Java Reflection(getXXX和getDeclaredXXX)
package com.sunchao.reflection; public class Person { private int age ; private String name; public ...
- 浅析Java反射机制
目前,在项目中使用Java反射机制(除Spring框架)的地方不多,但为后续准备,简单将最近的反射体会总结如下: 1. 按光学中的反射,可以将java中的反射理解为“镜像”.有以下用途: Java反射 ...
- 【java】java反射初探 ——“当类也照起镜子”
反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解) 我理解的java反射机制就是: 提供一套完善而强大的API ...
- 【java】java反射初探 ——“当类也学会照镜子”
反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解哈) 我理解的java反射机制就是: 提供一套完善而强 ...
- Java反射初探 ——“当类也学会照镜子”
反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解哈) 我理解的java反射机制就是: 提供一套完善而强大的 ...
- 有关java反射的几个小方法的作用和区别
1.Class类中 getXXX()和getDeclaredXXX()的作用和区别: 前者获取某个类的所有公共(public)的字段(or方法or构造函数),包括父类.后者获取所有的字段(or方法or ...
- 不藏了,这些Java反射用法总结都告诉你们
摘要:Java反射是一种非常强大的机制,它可以在同一个系统中去检测内部的类的字段.方法和构造函数.它非常多的Java框架中,都大量应用了反射技术,如Hibernate和Spring.可以说,反射机制的 ...
- Java反射机制深入研究
ava 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”. 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? ...
- java 反射 动态代理
在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大 ...
随机推荐
- C++中的自动存储、静态存储和动态存储
根据用于分配内存的方法,C++中有3中管理数据内存的方式:自动存储.静态存储和动态存储(有时也叫做自由存储空间或堆).在存在是间的长短方面,以这三种方式分配的数据对象各不相同.下面简要介绍这三种类型( ...
- docker的本地仓库换成阿里云的镜像仓库
1,阿里云上注册账号,我的已经注册好了,仓库名称:registry.cn-hangzhou.aliyuncs.com/woccb2/chen 2,本地安装docker: yum -y install ...
- Linux删除oracle数据库
手动的删除ORACLE数据库. 本人的做法: su - root lsnrctl stop kill -9 `ps -ef |grep oracle |grep -v grep |awk '{prin ...
- 如何自定义JSTL标签与SpringMVC 标签的属性中套JSTL标签报错的解决方法
如何自定义JSTL标签 1.创建一个类,从SimpleTagSupport继承 A) 通过继承可以获得当前JSP页面上的对象,如JspContext I) 实际上可以强转为PageContext II ...
- CSS Sprites 原理技术介绍及其优化方法
先期的准备工作 应对一个项目后期维护成本大的问题,我们最好的解决方案就是在开始前制定一系列的规范来限制问题的产品.好的开始是成功的一半.对于CSS Sprites,在项目开始前,我们要充分认识一个产品 ...
- glibc-2.23_int_free_流程浅析
- good blog
https://blog.csdn.net/fgf00/article/details/52793739
- Java8 中的时间和日期 API
1. 日期和时间概述 LocalDate,LocalTime,LocalDateTime类的实例是不可变的对象,分别表示使用 ISO-8601 日历系统 的日期,时间,日期和时间;它们提供了简单的日期 ...
- 内核通信之Netlink源码分析-基础架构
2017-07-04 netlink是一种基于网络的通信机制,一般用于内核内部或者内核与用户层之间的通信.其有一个明显的特点就是异步性,通信的双方不要求同时在线,也就不用阻塞等待.NetLink按照数 ...
- windows通过ssh连接虚拟机中的ubuntu步骤
linux端开启ssh服务 1.安装openssh-server包 sudo apt-get install openssh-server 2.启动ssh server sudo /etc/init. ...