码迷,mamicode.com
首页 > 编程语言 > 详细

java 反射

时间:2019-05-11 09:38:54      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:虚拟机   nts   otf   通过   jvm   etc   round   源程序   null   

java.lang.Class类:Class是一个类,构造方法是private,由JVM创建(无法直接new CLass(),其对象是内存里的一份字节码)。
放射: 反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。
例如它允许一个java的类获取他所有的成员变量和方法并且显示出来。
Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。
例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。
reflection可以动态的载入并取得 Java 组件(类) 的属性。(来自Sun)

 Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。

基本的 Java类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。Class 没有公共构造方法。

 

如何得到类的信息: Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。如下,三种方法可以得到类的信息:

可以通过类名称(Date.class);可以通过对象得到(p1.getclass);也可以通过一个运行时的字符串(Class.forname("XXXXX"))得到。

     Person p1 = new Person();
        //下面的这三种方式都可以得到字节码
        Class c1 = Date.class;
        Class<? extends Person> c2 = p1.getClass();
        Class<?> c3 = null;
        //若存在则加载,否则新建,往往使用第三种,类的名字在写源程序时不需要知道,到运行时再传递过来
        try {
           c3 = Class.forName("java.lang.String");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

 

java 反射

标签:虚拟机   nts   otf   通过   jvm   etc   round   源程序   null   

原文地址:https://www.cnblogs.com/liufei1983/p/10847650.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!