通过反射得到一个类中的完整的结构,就要使用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. jQuery 动画 _animate() 方法

    一.jQuery animate() 方法用于创建自定义动画. 必需的 params 参数定义形成动画的 CSS 属性. 可选的 speed 参数规定效果的时长.它可以取以下值:"slow& ...

  2. js中encode、decode的应用说明

    escape 方法 返回一个可在所有计算机上读取的编码 String 对象. function escape(charString : String) : String 参数 charString 必 ...

  3. UVALive 3989 Ladies' Choice(稳定婚姻问题:稳定匹配、合作博弈)

    题意:男女各n人,进行婚配,对于每个人来说,所有异性都存在优先次序,即最喜欢某人,其次喜欢某人...输出一个稳定婚配方案.所谓稳定,就是指未结婚的一对异性,彼此喜欢对方的程度都胜过自己的另一半,那么这 ...

  4. cocoStudio UI编辑器 学习总结

    一.控件 控件基类 UIWidget:所有UI控件的基类 addChild:添加UIWidget类型的节点 addRenderer:添加CCNode类型的节点 所有UIWidget,都可以设置成触摸s ...

  5. 每天一个Linux命令(7): cp

    cp命令         该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大.         语法: cp [选项] 源文件或目录 目标文件或目录 ...

  6. AIX 第7章 指令记录

    要点: AIX文件系统的访问路径 AIX文件系统目录树 创建AIX文件系统 文件系统的卸载和删除 文件系统的自动挂载 文件系统的容量管理 文件系统的一致性管理 文件系统的卸载失败 文件系统的快照管理 ...

  7. EIG集团简单介绍

    有朋友会问为什么要介绍EIG集团,他们是干什么的?与域名.主机.IDC行业资讯等有啥关系?EIG集团很牛逼么?带着这些疑问,简单的给大家做个介绍,希望能帮助大家了解这个IDC行业里面的“魔鬼”! EI ...

  8. Vagrant使用笔记

    vagrant box add [options] <name, url, or path> - 添加box至vagrant的管理列表 vagrant init 初始化虚拟机至当前文件夹并 ...

  9. C++重要知识点小结---2

    C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html 1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继 ...

  10. 怎样下载完整的Spring包

    自从3.2版本以后,Spring不再提供包含所有库的文件下载了只有Sping自身的最基本库,所依赖的东西需要自己搞定首先, 这个链接 包含了Spring自身和所用到的所有东西   这个 是上述链接的说 ...