Java反射机制(取得类的结构)
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反射机制(取得类的结构)的更多相关文章
- Java 反射机制(包括组成、结构、示例说明等内容)
第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们可以根据“类的部分已经的信息”来还原“类的全部的信息”.这里“类的部分已经的信息”,可以是“类名”或“类的对象” ...
- [转载]Java 反射机制(包括组成、结构、示例说明等内容)
FROM:http://www.cnblogs.com/skywang12345/p/3345205.html 第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们 ...
- 一个例子让你了解Java反射机制
本文来自:blog.csdn.net/ljphhj JAVA反射机制: 通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运 ...
- (转)个例子让你了解Java反射机制
个例子让你了解Java反射机制 原文地址:http://blog.csdn.net/ljphhj/article/details/12858767 JAVA反射机制: 通俗地说,反射机制就是可 ...
- (转)JAVA反射机制理解
JAVA反射机制: 通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运行的时候还可以动态地去操作他们. 理论的东东太多也没 ...
- 【java提高】---java反射机制
java反射机制 一.概述 1.什么是反射机制 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态 ...
- Java反射机制--笔记
1.认识Class类 任何一个类都是Class类的实例对象,这个实例对象有三种表示方式. /*java 反射机制*/ // 获取类的方法 UserDao userDao = new UserDao() ...
- Java反射机制demo(四)—获取一个类的父类和实现的接口
Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 ...
- java反射机制与动态加载类
什么是java反射机制? 1.当程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言.我们认为java并不是动态语言,但是它却有一个非常突出的动态相关机制,俗称:反射. IT行业里这么说,没有 ...
- 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换
作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...
随机推荐
- RIA技术
Rich Internet Application(富互联网应用程序,简称RIA),一种全新的Web应用程序架构,它结合了桌面软件良好的用户体验和web应用程序易部署的优点,很快获得了企业的青睐. 近 ...
- 常见NoSQL的特点分析与比较
3.分类: 3.1(最常见的键值存储) a.临时性的:保存在内存中,可以进行快速的保存和读取操作, 数据有可能丢失 b.永久性:在磁盘上保存数据,可以进行快读的读写(没有内存中快),数据不会丢失 c. ...
- HDU 4513 吉哥系列故事——完美队形II
变形的Manacher算法,在扩展的时候要加入限制条件,满足题目中说的从左到中间身高不减. 其他地方倒是没有什么改动.. //#define LOCAL #include <iostream&g ...
- jstl表达式
JSTL标签库 1.什么是JSTL JSTL是apache对EL表达式的拓展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便, 它与JSP动作标签一样,只不过它不是JSP ...
- xp关不了机
自己测试:按第2点的设置既可成功1.点“开始→设置→控制面板→电源选项→高级电源管理”,如果你的机器支持高级电源管理功能,则选中“启用高级电源管理支持”:2.单击“开始”,并运行“regedit”,然 ...
- Heritrix源码分析(十五) 各种问题总结(转)
开博客以及建立Heritrix 群有一段时间了(这里谢谢大家的关注),这篇博客将整理这段时间所遇到的问题.同时由于自己从今年5月份开始就不怎么接触Heritrix,很多东西开始遗忘(不过里面思想没忘) ...
- 【转】shell脚本调试(bash trap support bashdb )
原文网址:http://zhu8337797.blog.163.com/blog/static/170617549201122512712136/ 命 令 选 项 功 能 bash –x 脚本名 回显 ...
- Android 注解的一些应用以及原理
在这边文章之前你首先需要对java 的注解部分有一个基本的了解(不需要太过的深入). 简单来说,注解这个东西就是用于辅助我们开发java代码的,注解本身无法干扰java源代码的执行. 在android ...
- slidingMenu默认显示菜单
关键词:slidingmenu 默认 显示 打开 菜单 showMenu toggle 问题:要在Activity一打开就显示slidingmenu. 解决: 搜索“slidingmenu 默认打开” ...
- 包装类-Character
1,isDigit();是否是数字 char c = '1'; boolean bool = Character.isDigit(c); System.out.println(bool);//true ...