反射机制 反射的应用 ---取得类的结构

1  取得所实现的全部接口

 1 public class InstanceDemo {
 2     public static void main(String[] args) {
 3         Class<?> c = null;
 4         try {
 5             c = Class.forName("com.matto.InstanceDemo.Person");
 6         } catch (ClassNotFoundException e) {
 7             e.printStackTrace();
 8         }
 9         Class<?>[] c1 = c.getInterfaces();
10         for( int i=0 ; i<c1.length ; i++ ){
11             System.out.println(c1[i].getName());
12         }
13     }
14 }

2  取得父类

 1 public class InstanceDemo {
 2     public static void main(String[] args) {
 3         Class<?> c = null;
 4         try {
 5             c = Class.forName("com.matto.InstanceDemo.Person");
 6         } catch (ClassNotFoundException e) {
 7             e.printStackTrace();
 8         }
 9
10         Class<?> c1 = c.getSuperclass();
11         System.out.println(c1.getName());
12     }
13 }

3  取得全部构造方法

 1 public class InstanceDemo {
 2     public static void main(String[] args) {
 3         Class<?> c = null;
 4         try {
 5             c = Class.forName("com.matto.InstanceDemo.Person");
 6         } catch (ClassNotFoundException e) {
 7             e.printStackTrace();
 8         }
 9
10         Constructor<?>[] cons = c.getConstructors();
11
12         for( int i=0 ; i<cons.length ; i++ ){
13             System.out.println(cons[i].getName());
14         }
15     }
16 

4  取得全部方法

 1 public class InstanceDemo {
 2     public static void main(String[] args) {
 3         Class<?> c = null;
 4         try {
 5             c = Class.forName("com.matto.InstanceDemo.Person");
 6         } catch (ClassNotFoundException e) {
 7             e.printStackTrace();
 8         }
 9
10         Method[] method = c.getMethods();
11
12         for( int i=0 ; i<method.length ; i++ ){
13             System.out.println(method[i].getName());          //取得方法名
14             System.out.println(method[i].getReturnType());       //取得返回值类型
15             System.out.println(method[i].getExceptionTypes());    //取得异常抛出
16         }
17     }
18 }

5  取得全部属性

 1 public class InstanceDemo {
 2     public static void main(String[] args) {
 3         Class<?> c = null;
 4         try {
 5             c = Class.forName("com.matto.InstanceDemo.Person");
 6         } catch (ClassNotFoundException e) {
 7             e.printStackTrace();
 8         }
 9         System.out.println("----------------------输出本类属性----------------------");
10         Field[] f = c.getDeclaredFields();          //获取属性
11
12         for( int i=0 ; i<f.length ; i++ ){
13             Class<?> r = f[i].getType();            //获取属性的类型
14             int mo = f[i].getModifiers();           //获取修饰符数字
15             String priv = Modifier.toString(mo);    //根据修饰符数字取得修饰符
16             System.out.println(priv + " ");         //输出修饰符
17             System.out.println(r.getName() + " ");  //输出属性类型
18             System.out.println(f[i].getName() + ";");     //输出属性名称
19         }
20         System.out.println("----------输出公共属性即实现的接口或父类中的公共属性----");
21         Field[] f = c.getFields();          //获取属性
22
23         for( int i=0 ; i<f.length ; i++ ){
24             Class<?> r = f[i].getType();            //获取属性的类型
25             int mo = f[i].getModifiers();           //获取修饰符数字
26             String priv = Modifier.toString(mo);    //根据修饰符数字取得修饰符
27             System.out.println(priv + " ");         //输出修饰符
28             System.out.println(r.getName() + " ");  //输出属性类型
29             System.out.println(f[i].getName() + ";");     //输出属性名称
30         }
31     }
32 }

IDE的输入.就可以获得类的方法或属性就是基于反射的原理

时间: 2024-10-10 17:32:48

反射机制 反射的应用 ---取得类的结构的相关文章

java 反射机制:运行时的类信息(为框架服务的Bug存在)

反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 换一种引出反射的说法是:当通过反射与一个未知的类型的对象打交道是,JVM只是简单地检查这个类,看它是属于哪个特定的类(就想RTTI那样).在用它做其他事情之前必须先加载那个类的Class对象.因此,那个类的.class文件对于JVM来说必须是可获取的:那么在本地机器上,要么通过网络获得

java反射机制剖析(三)—类类型Class

为了区别于我们常用的Class,因此给了个中文名类类型.目的就是为了知道此Class非彼Class.上一篇博客已经介绍了Class Loader,它的作用是根据提供的信息来加载类到内存中.我之前有提过这个类信息的提供者就是本篇博客要介绍的Class.提醒:一个类的Class对象和它的Instance是不一样的,切记,不然你会混乱的.开始了! 概念 Class类是所有类(注意是对象)的共有信息的抽象,比如该类实现的接口.对应的加载器.类名等等.一句话,类类型保存了每个类所对应的类型信息.每一个类都

java 中利用反射机制获取和设置实体类的属性值

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. JAVA反射(放射)机制:"程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可

Java进阶之reflection(反射机制)——反射概念与基础

反射机制是Java动态性之一,而说到动态性首先得了解动态语言.那么何为动态语言? 一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见的JavaScript就是动态语言,除此之外Ruby,Python等也属于动态语言,而C.C++则不属于动态语言. 二.Java是动态语言吗? 从动态语言能在运行时改变程序结构结构或则变量类型上看,Java和C.C++一样都不属于动态语言. 但是JAVA却又一个非常突出的与动态相关的机制:反射机制.

java 反射机制与动态加载类学习要点

获取Class类的对象: 假设Foo是一个类,Foo foo = new Foo():则 第一种:Class c1 = Foo.class; 第二种:Class c2 = foo.getClass(); 第三种:Class c3 = Class.forName("com.nudt.reflection.Foo"); //会抛出异常 此时  c1 == c2 == c3 为true 也可以通过c1\c2\c3创建Foo的实例: Foo foo = (Foo)c1.newInstance(

Swift反射机制实现 AppDelegate 字符串获取类并成为根控制器

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { window = UIWindow(frame: UIScreen.main.bounds) // 依据String名字拿到控制器(添加项目名称,命名空间,不能有数字和特殊符号) // 返回的是AnyClass? 需要

Java 类反射机制分析

一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 在Java中的反射机制,被称为Reflection.(大家看到这个单词,第一个想法应该就是去开发文档中搜一下了.)它允许运行中的Java程序对自身进行检查,并能直接操作程序的内部属性或方法.Reflection机制

Java反射机制Class类的用法详解

本文转自http://blog.sina.com.cn/s/blog_6c9536b90100rqh4.html,感谢作者 java的Class类是java反射机制的基础,通过Class类我们可以获得关于一个类的相关信息,下面我们来了解一下有关java中Class类的相关知识! java.lang.Class是一个比较特殊的类,它用于封装被装入到JVM中的类(包括类和接口)的信息. 当一个类或接口被装入的JVM时便会产生一个与之关联的java.lang.Class对象,可以通过这个Class对象

Android反射机制实现与原理

本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 在Java中的反射机制,被称为Reflection(大家看到这个单词,第一个想法应该就是去开发文档中