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中提供的动态代理也是非常强大 ...
随机推荐
- 基于java 的websocket的聊天功能,一开始初始化websocket,执行打开连接之后就直接关闭连接了。
1 错误描述: java 后台没有报错,但是就是连接不上,一连上又自动关闭. 2 错误根源: 缺少jar包. 对比了报错的tomcat 的jar包和不报错的jar包 发现是tomcat下缺少上图绿色框 ...
- handlebears使用
Handlebars 文档笔记: http://www.ghostchina.com/handlebars-wen-dang-bi-ji/ Handlebars模板引擎中的each嵌套及源码浅读: h ...
- 去掉第一次ssh连接的yes问题
第一次执行的时候,有的机器可能会提醒输入ssh初次登录询问yes/no,如果要去掉这个yes/no的询问环节, 只需要修改本机的/etc/ssh/ssh_config文件中的"# Stric ...
- angular2+ 中封装调用递归tree
子组件 given-person.html <!--权限设置-选择员工--> <li [class.noborder]="!dir.shierarchy" *n ...
- [Android Tips] 27. 检查 APK 是否可调试
使用 Android SDK 提供的 aapt 检查 APK 文件 $ aapt d badging ${APK_FILE} | grep 'application-debuggable' 检查自身 ...
- debian卸载旧内核
debian卸载旧内核要先看看有哪些旧的内核,用命令: uname -a dpkg --get-selections |grep linux 如果你的内核是以kernel开头的就把上面的linux改成 ...
- Zabbix监控主动模式
接上篇:Zabbix监控web,MySQL,TCP状态,Nginx 参考官方文档:https://www.zabbix.com/documentation/3.4/zh/manual zabbix默认 ...
- java面试基础题------》Java 中的final关键字有哪些用法
(1)修饰类:表示该类不能被继承: (2)修饰方法:表示方法不能被重写: (3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量).
- git学习(4)远程库和分支管理
git学习(4)远程库和分支管理 1.1建立本地git库和远程库联系 我使用的是GitHub上的库,首先在GitHub上新建一个库,在建立与远程库的联系之前需要建立ssh key.建立ssh key可 ...
- Tilera--100核cpu
市场对多核的需求越来越多,主要是因为单核处理能力不可能像以往那样不断地提升.从上世纪90 年代开始,整个产业遵循摩尔定律,即芯片上可容纳的晶体管数目每隔18个月便会增加一倍,性能也提升一倍.随着时间的 ...