直接看它的一个例子

</pre><pre name="code" class="java">package reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier; class Behavior {
private long distance;
private long amount; public long getDistance() {
return distance;
} public void setDistance(long distance) {
this.distance = distance;
} public long getAmount() {
return amount;
} public void setAmount(long amount) {
this.amount = amount;
} public String walk() {
return "走了" + distance + "公里";
} public String eat() {
return "吃了" + amount + "碗饭";
} } class Person extends Behavior {
private String username;
private int age;
static char sex;
protected final double high = 0;
public String[] hobby;
public Behavior be; public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public char getSex() {
return sex;
} public static void setSex(char sex) {
Person.sex = sex;
} public double getHigh() {
return high;
} public String[] getHobby() {
return hobby;
} public void setHobby(String[] hobby) {
this.hobby = hobby;
} public Behavior getBe() {
return be;
} public void setBe(Behavior be) {
this.be = be;
} public Person() { } public Person(String username, int age, String[] hobby, Behavior be) {
super();
this.username = username;
this.age = age;
this.hobby = hobby;
this.be = be;
} public String fun2(int a, int b, int c, String d, double e, float f, char g) {
return a + b + c + d + e + f + g;
} } public class ObjectAnalyzer { public void printFields(Field[] fields) {
for (int i = 0; i < fields.length; i++) {
Field f = fields[i];
int m = f.getModifiers();
String name = f.getName();
Class<? > clazz = f.getType();
System.out.println(Modifier.toString(m) + " " + clazz.getName()
+ " " + name);
}
} public void printConstructor(Constructor<?>[] c) {
for (int i = 0; i < c.length; i++) {
Constructor<? > con = c[i];
String name = con.getName();
int m = con.getModifiers();
Class<?>[] clazz = con.getParameterTypes();
System.out.print(Modifier.toString(m) + " " + name + "(");
for (int j = 0; j < clazz.length; j++) {
System.out.print(clazz[j].getName() + " ");
}
System.out.println(")");
}
} public void printMethod(Method[] methods) {
for (int i = 0; i < methods.length; i++) {
Method m = methods[i];
int modi = m.getModifiers();
String name = m.getName();
Class<?> returnType = m.getReturnType();
Class<?>[] paramType = m.getParameterTypes();
System.out.print(Modifier.toString(modi) + " "
+ returnType.getName() + " " + name + "(");
for (int j = 0; j < paramType.length; j++) {
System.out.print(paramType[j].getName() + " ");
}
System.out.println(")");
}
} public void analyzer(Object obj) {
Class<?> clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
Constructor<?>[] c = clazz.getDeclaredConstructors();
Method[] method = clazz.getDeclaredMethods();
//Method[] method = clazz.getMethods();
System.out.println("=====属性变量的分析=====");
System.out.println("Fields长度:" + fields.length + " 变量例如以下");
printFields(fields);
System.out.println("=====构造方法分析=====");
printConstructor(c);
System.out.println("=====方法分析=====");
printMethod(method); } public static void main(String[] args) {
// TODO Auto-generated method stub
Behavior be = new Behavior();
Person p = new Person("chiwei", 26, new String[] { "1", "2" }, be);
new ObjectAnalyzer().analyzer(p);
} }

执行结果例如以下:

=====属性变量的分析=====

Fields长度:6 变量例如以下

private java.lang.String username

private int age

static char sex

protected final double high

public [Ljava.lang.String; hobby

public reflect.Behavior be

=====构造方法分析=====

public reflect.Person()

public reflect.Person(java.lang.String int [Ljava.lang.String; reflect.Behavior )

=====方法分析=====

public void setUsername(java.lang.String )

public int getAge()

public void setAge(int )

public char getSex()

public static void setSex(char )

public double getHigh()

public [Ljava.lang.String; getHobby()

public void setHobby([Ljava.lang.String; )

public reflect.Behavior getBe()

public void setBe(reflect.Behavior )

public java.lang.String fun2(int int int java.lang.String double float char )

public java.lang.String getUsername()

版权声明:本文博主原创文章,博客,未经同意不得转载。

java反思reflect 分析Object物的更多相关文章

  1. Java源码分析 | Object

    本文基于 OracleJDK 11, HotSpot 虚拟机. Object 定义 Object 类是类层次结构的根.每个类都有 Object 类作为超类.所有对象,包括数组等,都实现了这个类的方法. ...

  2. Java源码分析 | CharSequence

    本文基于 OracleJDK 11, HotSpot 虚拟机. CharSequence 定义 CharSequence 是 java.lang 包下的一个接口,是 char 值的可读序列, 即其本身 ...

  3. JAVA JDBC 元数据分析小结

    纯干货: 获取数据库名称: /** * 获取数据库的名称 */ public void getDataBaseName() throws Exception { Connection con = DS ...

  4. json解析异常 - net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

    注:在项目中, 我使用原生的ajax请求数据的时候, JSONObject没能帮我解析, 当却不给我报错, 我是在junit单元测试中测试的时候, 发现的.发现好多时候, 特别是通过ajax请求, 不 ...

  5. Java反序列化漏洞分析

    相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...

  6. java反序列化Commons-Collections5分析

    BadAttributeValueException package org.lain.poc; import org.apache.commons.collections.Transformer; ...

  7. JAVA编程思想——分析阅读

    需要源码.JDK1.6 .编码风格参考阿里java规约 7/12开始 有点意识到自己喜欢理论大而泛的模糊知识的学习,而不喜欢实践和细节的打磨,是因为粗心浮躁导致的么? cron表达式使用 设计能力.领 ...

  8. 自己写一个java.lang.reflect.Proxy代理的实现

    前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Pr ...

  9. java.lang.reflect.Method

    java.lang.reflect.Method 一.Method类是什么 Method是一个类,位于java.lang.reflect包下. 在Java反射中 Method类描述的是 类的方法信息, ...

随机推荐

  1. Windows Phone开发(20):当MediaElement和VideoBrush合作的时候

    原文:Windows Phone开发(20):当MediaElement和VideoBrush合作的时候 前面说的那么多控件都是"静态"的,都是"哑吧"的,今天 ...

  2. Python 的PyCurl模块使用

    PycURl是一个C语言写的libcurl的python绑定库.libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库.它的功能很强大,PycURL 是一个非常快速(参考多并发操作) ...

  3. Android开发之使用Handler封装下载图片工具类(源码分享)

    假设每下载一张图片,就得重写一次Http协议,多线程的启动和handler的信息传递就显得太麻烦了,我们直接来封装一个工具类,便于我们以后在开发时随时能够调用. (1)在清单文件加入权限 <us ...

  4. WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(三)实现ReplyChannel(2016-03-15 12:35)

    这是这个系列的第三篇,其他的文章请点击下列目录 WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(一)概要设计 WCF扩展之实现ZeroMQ绑定和protocolBuffer消息 ...

  5. Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor

    1.错误描写叙述 信息: Setting autowire strategy to name 2014-7-13 1:37:43 org.apache.struts2.spring.StrutsSpr ...

  6. 2014在百度之星程序设计大赛 - 资格 第四个问题 Labyrinth

    小记:dfs暂停,不是决定性的 思维:由于只有三个方向向上和向下和向右,然后,我对待每列从左至右.然后,当在下一列的上一列的处理再加工每个值去获得正确的值,保存各坐标的数组格你可以得到最大值.每处理完 ...

  7. 并发编程实践三:Condition

    Condition实例始终被绑定到一个锁(Lock)上.Lock替代了Java的synchronized方法,而Condition则替代了Object的监视器方法,包含wait.notify和noti ...

  8. 【C语言探索之旅】 第一部分第五课:运算那点事

    内容简介 1.课程大纲 2.第一部分第五课:运算那点事 3.第一部分第六课预告:条件表达式 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏 ...

  9. ComboBox 自动调整组合框下拉部分的宽度

    /// <summary>        /// ComboBox 自动调整组合框下拉部分的宽度        /// </summary>        void Resiz ...

  10. poj2112 Optimal Milking --- 最大流量,二分法

    nx一个挤奶器,ny奶牛,每个挤奶罐为最m奶牛使用. 现在给nx+ny在矩阵之间的距离.要求使所有奶牛挤奶到挤奶正在旅程,最小的个体奶牛步行距离的最大值. 始感觉这个类似二分图匹配,不同之处在于挤奶器 ...