通过反射得到一个类中的完整的结构,就要使用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. Hadoop2配置详解

    配置文件 hadoop的配置是由两种重要类型的配置文件进行驱动的: 默认是只读的配置: core-default.xml, hdfs-default.xml, yarn-default.xml and ...

  2. ADO与ADO.NET的区别与介绍

    1. ADO与ADO.NET简介ADO与ADO.NET既有相似也有区别,他们都能够编写对数据库服务器中的数据进行访问和操作的应用程序,并且易于使用.高速度.低内存支出和占用磁盘空间较少,支持用于建立基 ...

  3. .net4.0下 解决asp.net中“从客户端中检测到有潜在危险的Request.Form值”的错误

    asp.net 2.0 通常解决办法 方案一: 将.aspx文件中的page项添加ValidateRequest="false" ,如下: <%@ Page Validate ...

  4. BZOJ 1935 园丁的烦恼

    离线,BIT. #include<iostream> #include<cstdio> #include<cstring> #include<algorith ...

  5. Linux下安装Android Studio(ubuntu)

    一. 安装Android Studio 1. 添加源,按回车键继续 sudo apt-add-repository ppa:paolorotolo/android-studio 2. 更新源 sudo ...

  6. Dom对象的方法应用一getElementById技巧、getElementsByName() IE,firefox兼容

    在document对象中有以下三个方法,对于程序员来说,真可谓无人不知,无人不晓,他们分别是: 1.getElementById()                  返回对拥有指定 id 的第一个对 ...

  7. 理解matplotlib绘图

    matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包.Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件.它能让使用者很轻松地将数据图形化 ...

  8. .CO域名快被这帮搞IT的玩坏了……

    鉴于近来国内访问Google的服务受阻,greatfire.org于前天推出了其基于亚马逊AWS的Google搜索镜像网站,地址是sinaapp.co.该网站随后因多家海外媒体的报道和众多微博大V的转 ...

  9. c#中const、static、readonly的区别

    1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...

  10. shell脚本基础——常用的sed命令举例

    一般在实际使用编辑器的过程中 , 常需要执行替换文件中的字符串.移动.删除.与搜寻数据行等等动作.当然 , 一般交互式编辑器(如 vi.emacs)都能做得到上述功能 , 但文件一旦有大量上述编辑需求 ...