Java Reflection(getXXX和getDeclaredXXX)
package com.sunchao.reflection; public class Person { private int age ;
private String name;
public String address;
public static final int X = 0;
private static final int Y = 0; public Person() { } private Person(String name) {
this.name = name;
} public Person(int age) {
this.age = age;
} public Person(int age, String name) {
this.age = age;
this.name = name;
} public void setAge(int age) {
this.age = age;
} public int getAge() {
return this.age;
} public void setName(String name) {
this.name = name;
} public String getName() {
return this.name;
} @SuppressWarnings("unused")
private void cry() { } public static void eat() { }
}
package com.sunchao.reflection; import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier; /**
* Java reflection
public com.sunchao.reflection.Person()
public com.sunchao.reflection.Person(int arg0; java.lang.String arg1)
public com.sunchao.reflection.Person(int arg0)
<==============================================>
public void setAge(int arg0)
public int getAge()
public static void eat()
public String getName()
public void setName(String arg0)
public final native Class getClass()
public native int hashCode()
public boolean equals(Object arg0)
public String toString()
public final native void notify()
public final native void notifyAll()
public final void wait(long arg0; int arg1)
public final void wait()
public final native void wait(long arg0)
<==============================================>
public void setAge(int arg0)
public int getAge()
private void cry()
public static void eat()
public String getName()
public void setName(String arg0)
<==============================================>
public String address
public static final int X
<==============================================>
private int age
private String name
public String address
public static final int X
private static final int Y
* @author Administrator
*
*/
public class Test { public static void main(String args[]) throws Exception{
testConstructor();
testMethods();
testDeclaredMethods();
testFields();
testDeclaredFields();
} /**
* print the public constructor of the class,
* not all,getDeclaredConstructors() ==> getAll
* @throws Exception
*/
public static void testConstructor() throws Exception{ Class<?> clazz = Class.forName("com.sunchao.reflection.Person");
Constructor<?>[] constructors = clazz.getConstructors();
for(Constructor<?> c : constructors){
int modifiers = c.getModifiers();
String modfifier = Modifier.toString(modifiers);
String name = c.getName();
Class<?>[] parameterTypes = c.getParameterTypes();
StringBuilder sb = new StringBuilder();
sb.append("(");
for(int i = 0; i < parameterTypes.length; i++){
if(i != 0){
sb.append("; ");
}
sb.append(parameterTypes[i].getName() + " arg" + i);
}
sb.append(")");
System.out.println(modfifier + " " + name + sb.toString() );
}
}
/**
* print all the method that the class and superclass
* interface declares(except the private)
* @throws Exception
*/
public static void testMethods() throws Exception {
System.out.println("<==============================================>");
Class<?> clazz = Class.forName("com.sunchao.reflection.Person");
Method[] allMethods = clazz.getMethods();//includes all the interface ,superclass methods
for(Method method : allMethods)//(except the private)
{
int modifiers = method.getModifiers();
String modifier = Modifier.toString(modifiers);
Class<?> returnClass = method.getReturnType();
String name = method.getName();
Class<?>[] parameterTypes = method.getParameterTypes();
StringBuilder sb = new StringBuilder();
sb.append("(");
for(int i = 0; i < parameterTypes.length; i++)
{
if(i != 0)
{
sb.append("; ");
}
sb.append(parameterTypes[i].getSimpleName() + " arg" + i);
}
sb.append(")");
System.out.println(modifier + " " + returnClass.getSimpleName() + " "
+ name + sb.toString());
}
}
/**
* print the all methods that the class declared;
* @throws Exception
*/
public static void testDeclaredMethods() throws Exception {
System.out.println("<==============================================>");
Class<?> clazz = Class.forName("com.sunchao.reflection.Person");
Method[] methods = clazz.getDeclaredMethods();
for(Method method : methods)
{
int modifiers = method.getModifiers();
String modifier = Modifier.toString(modifiers);
Class<?> returnType = method.getReturnType();
String name = method.getName();
Class<?>[] parameterTypes = method.getParameterTypes();
StringBuilder sb = new StringBuilder();
sb.append("(");
for(int i = 0; i < parameterTypes.length; i++)
{
if(i != 0)
{
sb.append("; ");
}
sb.append(parameterTypes[i].getSimpleName() + " arg" + i);
}
sb.append(")");
System.out.println(modifier + " " + returnType.getSimpleName() + " "
+ name + sb.toString());
}
}
/**
* print the fields of public(includes the static ,final modifier)
* but the private is pass
* @throws Exception
*/
public static void testFields() throws Exception {
System.out.println("<==============================================>");
Class<?> clazz = Class.forName("com.sunchao.reflection.Person");
Field[] fields = clazz.getFields();
for(Field field : fields)
{
int modifiers = field.getModifiers();
String modifier = Modifier.toString(modifiers);
Class<?> fieldType = field.getType();
String name = field.getName();
System.out.println(modifier + " " + fieldType.getSimpleName() +
" " + name);
}
} /**
* print the all fields that the class declared
* @throws Exception
*/
public static void testDeclaredFields() throws Exception {
System.out.println("<==============================================>");
Class<?> clazz = Class.forName("com.sunchao.reflection.Person");
Field[] fields = clazz.getDeclaredFields();
for(Field field : fields)
{
int modifiers = field.getModifiers();
String modifier = Modifier.toString(modifiers);
Class<?> fieldType = field.getType();
String name = field.getName();
System.out.println(modifier + " " + fieldType.getSimpleName() +
" " + name);
}
}
}
Java Reflection(getXXX和getDeclaredXXX)的更多相关文章
- java反射 - getXXX 与 getDeclaredXXX
1.getXXX 和 getDeclaredXXX java 里 Class<?> 有下面这些方法: 类似的方法有: 2.getMethod(s) 和 getDeclaredMethod( ...
- java Reflection(反射)基础知识讲解
原文链接:小ben马的java Reflection(反射)基础知识讲解 1.获取Class对象的方式 1.1)使用 "Class#forName" public static C ...
- [改善Java代码]适时选择getDeclaredxxx和getxxx
Java的Class类提供了很多的getDeclaredxxx方法和getxxx方法,例如getDeclaredmethod和getMethod成对出现,getDeclaredConstructors ...
- Java Reflection
Java语言的反射机制 1. Java反射的含义:获取应用中正在运行的Java对象. 2. Java反射机制: 在运行的程序中,对于任意的类,都可以知道这个类的属性.方法以及构造函数,对于任意对象都可 ...
- Java Reflection 反射基础
反射基础: package reflection; /** * Created by : Infaraway * DATE : 2017/3/2 * Time : 23:06 * Funtion : ...
- Some Link: Java Reflection
http://docs.oracle.com/javase/tutorial/reflect/index.html https://bugs.openjdk.java.net/browse/JDK-4 ...
- java reflection总结
一.java反射常用方法 获取Class的几种方式: Class class1 = String.class;// 该方法最为安全可靠,程序性能更高. Class class2 = s ...
- Java Reflection - Getters and Setters
原文链接:http://tutorials.jenkov.com/java-reflection/getters-setters.html 通过使用 Java 反射,我们能够在程序执行时观察 clas ...
- Java Reflection (JAVA反射) --转载
对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的一些非 ...
随机推荐
- 通过 python的 __call__ 函数与元类 实现单例模式
简单一句话,当一个类实现__call__方法时,这个类的实例就会变成可调用对象. 直接上测试代码 class ClassA: def __call__(self, *args, **kwargs): ...
- iOS开发系列
因为最近面试了一些人,校招.初中级.高级.架构师,各种级别的,发现大家水平差异很大,有的高级的工程师很多问题都回答不上来,所以想梳理下iOS的知识点,写成一个系列,如果时间允许的话,会录制成视频放到网 ...
- 嵌入式linux下wifi网卡的使用(四)——应用程序sub_supplicant编译
有readme先看看readme看看有没有编译的方法 里面告诉我们安装时可能会依赖某些库事实证明会依赖openssl库,之前也使用过openssl 这个文件中有个defualtconfig,先用它做. ...
- 使用xUnit为.net core程序进行单元测试(上)
一. 导读 为什么要编写自动化测试程序(Automated Tests)? 可以频繁的进行测试 可以在任何时间进行测试,也可以按计划定时进行,例如:可以在半夜进行自动测试. 肯定比人工测试要快. 可以 ...
- Apache kafka 工作原理介绍
消息队列 消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上, 队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置.或在继续执行 ...
- 类Unix平台程序调试
GNU Binutils GNU Binutils 建立main.c文件,内容如下: #include <stdio.h> void main() { int a = 5/0; } 编译m ...
- VirtualBox - RTR3InitEx failed with rc=-1912 (rc=-1912)
有一天重启电脑后虚拟机virtual box突然打不开了,提示类似 https://askubuntu.com/questions/900794/virtualbox-rtr3initex-faile ...
- 共60课:Python基础教程
简介: 你会看到一堆下载链接.我们就选"Python 2.7.5 Windows Installer",如果是64位系统的同学选下面那个"Python 2.7.5 Win ...
- 【批处理学习笔记】第十二课:常用DOS命令(2)
文件管理type 显示文本文件的内容.copy 将一份或多份文件复制到另一个位置.del 删除一个或数个文件.move 移动文件并重命名文件和目录.(Windows XP Home Edition中没 ...
- bzoj:1221;vijos 1552 软件开发
Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...