通过反射得到一个类中的完整的结构,就要使用java.lang.reflect包中的以下几个类:
 
Constructor:表示类中的构造方法
Field:表示类中的属性
Method:表示类中的方法
 
Class类中的常用方法:
 
确定此对象所表示的类或接口实现的接口。
public Class<?>[] getInterfaces()
取得父类
public Class<? super T> getSuperclass()
取得全部的构造方法
public Constructor<?>[] getConstructors()throws SecurityException
 取得类中的全部方法

public Method[] getMethods()throws SecurityException
 
Method类中的常用方法:
获取全部异常抛出
public Class<?>[] getExceptionTypes()
获取本方法的访问修饰符(取出权限)
public int getModifiers()
获取方法的返回值类型
public Class<?> getReturnType()
获得方法的全部参数类型
public Class<?>[] getParameterTypes()
 
 
Constructor<T>类中的常用的方法:
 
列出构造方法中的参数类型
public Class<?>[] getParameterTypes()
获取本方法的访问修饰符(取出权限)
public int getModifiers()
注:在取得权限时发现返回的是一个数字而不是public,这是因为在整个java中对于方法的修饰符是使用一定的数字表示出来的,如果要把这个数字还原成用户可以看懂的关键字,则必须依靠Modifier类完成;
int modifiers = constructors[i].getModifiers();
//还原权限(public static String toString(int mod))
System. out.println(Modifier.toString(modifiers));
输出构造方法的名称
public String getName()
 
Field(属性)中的常用的方法:
 
一般获取属性时有两种操作:
1:得到实现结构的接口或父类中的公共属性:
public Field[] getFields() throws SecurityExceotion
2:得到本类中的全部属性
public Field[] getDeclaredFields() throws SecurityExceotion
 
常用方法:
取得属性的类型:
public Class<?> getType()
得到修饰符数字
public int getModifiers()
 
实例:
package cn.itcast;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier; public class ClassDemo05 {
public static void main(String[] args) {
Class<?> c1 = null; try {
c1 = Class.forName("cn.itcast.Person");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("-----------------获取实现的全部接口----------------");
// 获取实现的全部接口
Class<?> interfaces[] = c1.getInterfaces();
for (Class<?> thisclass : interfaces) {
System.out.println(thisclass.getName());
} System.out.println("-----------------取得父类----------------");
Class<?> superclass = c1.getSuperclass();
System.out.println(superclass.getName()); System.out.println("-----------------取得一个类中的全部的构造方法----------------");
Constructor<?> constructors[] = c1.getConstructors();
for (int i = 0; i < constructors.length; i++) {
Class<?> parameterTypes[] = constructors[i].getParameterTypes();
//取得权限
int modifiers = constructors[i].getModifiers();
//还原权限(public static String toString(int mod))
System.out.println(Modifier.toString(modifiers));
//输出构造方法名称
String name = constructors[i].getName();
//循环打印参数类型
for (int j = 0; j < parameterTypes.length; j++) {
System.out.println(parameterTypes[j]);
System.out.println(modifiers);
System.out.println(name);
} }
System.out.println("-----------------------取得全部的方法-------------------------");
//获取全部的方法
Method[] methods = c1.getMethods();
for (int j = 0; j < methods.length; j++) {
System.out.println(methods[j]);
//得到方法的返回值类型
Class<?> returnType = methods[j].getReturnType();
System.out.println(returnType);
//得到全部参数的类型
Class<?>[] parameterTypes2 = methods[j].getParameterTypes();
for (Class<?> class1 : parameterTypes2) {
System.out.println(class1);
}
//获得全部异常抛出
Class<?>[] exceptionTypes = methods[j].getExceptionTypes();
//判断是否有异常
if(exceptionTypes.length>0)
{
System.out.println(") throws ");
}else{
System.out.println(")");
}
for (int i = 0; i < exceptionTypes.length; i++) {
System.out.println(exceptionTypes[i].getName());
if(i<exceptionTypes.length-1)
{
System.out.println(",");
}
}
System.out.println();
}
System.out.println("==================取得本类全部属性==================");
//得到本类中的属性
Field[] declaredFields = c1.getDeclaredFields();
for (int i = 0; i < declaredFields.length; i++) {
//取得本类中属性类型
Class<?> type = declaredFields[i].getType();
System.out.println(type);
//得到修饰符的数字
int modifiers = declaredFields[i].getModifiers();
System.out.println(modifiers);
//取得属性的修饰符
String priv = Modifier.toString(modifiers);
System.out.println(priv); }
System.out.println("==================取得父类全部属性==================");
Field[] fields = c1.getFields();
for (int i = 0; i < fields.length; i++) {
Class<?> type = fields[i].getType();
System.out.println(type);
int modifiers = fields[i].getModifiers();
System.out.println(modifiers);
String priv = Modifier.toString(modifiers);
System.out.println(priv);
}
}
}

 

Person类:
package cn.itcast02; public class Person implements China{
private String name;
private int age;
private char sex; public Person() {
super();
} public Person(String name, int age, char sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public char getSex() {
return sex;
} public void setSex(char sex) {
this.sex = sex;
}
public void eat()
{
System.out.println("吃了");
} @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
} @Override
public void sayChina() {
// TODO Auto-generated method stub
System.out.println("作者:"+ AUTHOR + "国籍:"+ NATIONAL);
} @Override
public String sayHello(String name, int age, char sex) {
// TODO Auto-generated method stub
return "姓名:" + name +"年龄:"+ age +"性别:"+ sex;
} }

  

China接口:
package cn.itcast02; public interface China {
public static final String NATIONAL = "China";
public static final String AUTHOR = "成龙"; public void sayChina(); public String sayHello(String name, int age, char sex);
}

  

 

Java反射机制(取得类的结构)的更多相关文章

  1. Java 反射机制(包括组成、结构、示例说明等内容)

    第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还原“类的全部的信息”.这里“类的部分已经的信息”,可以是“类名”或“类的对象” ...

  2. [转载]Java 反射机制(包括组成、结构、示例说明等内容)

    FROM:http://www.cnblogs.com/skywang12345/p/3345205.html 第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们 ...

  3. 一个例子让你了解Java反射机制

    本文来自:blog.csdn.net/ljphhj JAVA反射机制: 通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运 ...

  4. (转)个例子让你了解Java反射机制

    个例子让你了解Java反射机制   原文地址:http://blog.csdn.net/ljphhj/article/details/12858767 JAVA反射机制:   通俗地说,反射机制就是可 ...

  5. (转)JAVA反射机制理解

    JAVA反射机制: 通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运行的时候还可以动态地去操作他们. 理论的东东太多也没 ...

  6. 【java提高】---java反射机制

    java反射机制 一.概述 1.什么是反射机制 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态 ...

  7. Java反射机制--笔记

    1.认识Class类 任何一个类都是Class类的实例对象,这个实例对象有三种表示方式. /*java 反射机制*/ // 获取类的方法 UserDao userDao = new UserDao() ...

  8. Java反射机制demo(四)—获取一个类的父类和实现的接口

    Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 ...

  9. java反射机制与动态加载类

    什么是java反射机制? 1.当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言.我们认为java并不是动态语言,但是它却有一个非常突出的动态相关机制,俗称:反射. IT行业里这么说,没有 ...

  10. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

    作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...

随机推荐

  1. bzoj4627: [BeiJing2016]回转寿司

    权值线段树. 要求 L<=(s[i]-s[j])<=R  (i<j). 的i和j的数量. 所以把前缀和s加入一棵权值线段树,每次询问满足条件的范围中的权值的个数. 权值线段树不能像普 ...

  2. UVa 11988 (数组模拟链表) Broken Keyboard (a.k.a. Beiju Text)

    题意: 模拟一个文本编辑器,可以输入字母数字下划线,如果遇到'['则认为是Home键,如果是']'则认作End键. 问最终屏幕上显示的结果是什么字符串. 分析: 如果在数组用大量的移动字符必然很耗时. ...

  3. 51nod1349 最大值

    还是傻叉单调栈 #include<cstdio> #include<cstring> #include<cctype> #include<algorithm& ...

  4. 漫游Kafka设计篇之性能优化

    Kafka在提高效率方面做了很大努力.Kafka的一个主要使用场景是处理网站活动日志,吞吐量是非常大的,每个页面都会产生好多次写操作.读方面,假设每个消息只被消费一次,读的量的也是很大的,Kafka也 ...

  5. BZOJ 2429 聪明的猴子

    kruskal. #include<iostream> #include<cstdio> #include<cstring> #include<algorit ...

  6. Android init.rc文件格式解析

    /***************************************************************************** * Android init.rc文件格式 ...

  7. HDU 5375 Gray code 格雷码(水题)

    题意:给一个二进制数(包含3种符号:'0'  '1'  '?'  ,问号可随意 ),要求将其转成格雷码,给一个序列a,若转成的格雷码第i位为1,则得分+a[i].求填充问号使得得分最多. 思路:如果了 ...

  8. HDU 5003 Osu!

    解题思路:水题,不多说. #include<cstdio> #include<cstring> #include<algorithm> #include<cm ...

  9. Linux系统性能诊断工具纲要

    Linux的性能分析工具众多,在微博上发现了系统性能专家Brendan D. Gregg,在最近LinuxCon NA 2014大会上发布的关于Linux性能方面的talk和幻灯片.和去年比较,今年增 ...

  10. MySQL基础之第17章 MySQL日志

    17.1.日志简介 二进制日志错误日志通用查询日志慢查询日志 17.2.二进制日志 二进制日志也叫作变更日志(update log),主要用于记录数据库的变化情况.通过二进制日志可以查询MySQL数据 ...