Java 反射机制(二)

  《Core Java Volume I --- Fundamentals》介绍了三种创建Class对象的方法。本文将举例说明这三种创建Class对象---创建类的方法。

一、public final native Class<?>  getClass()

  Object类中的getClass()方法将返回一个Class类型的实例,即一个具体的类(为Class的对象)。

1)Class未参数化,即API为Class getClass()

输出结果class reflection.Employee

返回值分析:class + 类完全限定名

2)Class参数化,约束传入参数继承类型

3)Class参数化,指定具体约束参数

代码分析:getClass()默认返回值为Class<?>,即参数类型未定。因此必须要强制类型转换成Class<Employee>

如果需要去掉返回结果中的关键字class,那么使用Class类的API---String getName()

1 public String getName() {
2     if (name == null)
3         name = getName0();
4     return name;
5 }
6
7 // cache the name to reduce the number of calls into the VM
8 private transient String name;
9 private native String getName0();

输出结果reflection.Employee

二、public static Class<?> forName(String className) 

  通过调用java.lang.Class的静态方法forName获得类名对应的Class对象。

1 public static Class<?> forName(String className)
2                 throws ClassNotFoundException {
3     return forName0(className, true,ClassLoader.getCallerClassLoader());
4 }

  其中传入的参数String className必须是完全限定名,即包名加类名。

  说明forName方法只有在className是与getName返回格式相同的类名或者接口名时才能够执行成功,否则forName方法抛出ClassNotFoundException异常。另外一点,forName方法是用于手工加载类。

输出结果:class reflection.Employee

    

  小结一下:getName返回的字符串格式是,包名+类名,不包括项目名。因此forName字符串格式也为,包名+类名。这与JDBC中利用forName静态方法加载驱动类略有区别

三、class<T> T.class,其中T代表数据类型

输出结果

class reflection.Employee
int
class java.lang.Integer
interface java.lang.Runnable

分析代码:曾经不求甚解的我一直以为此处class是一个属性,不过在写这篇博客时,我明白了之前的观点是错误的。首先,从Eclipse代码的高亮来看,class就是关键字;其次int是基本数据类型,不可能具有属性。综上几点原因,可以总结如下:如果T是任意的Java类型,T.class将代表与其匹配的类型

四、总结反思

  Class对象实际上表示的是数据类型(基本或引用数据类型),而这个类型并非一定是类

  当然,从这里可以看出Class<int>允许参数是基本数据类型,与泛型要求必须是引用数据类型是不同的。可以当作一个特例来记忆。

参考文献

Core Java Volume I --- Fundamentals   Cay S. Horstmann  Gary Cornell 著    

  声明:文章系作者原创整理,如需转载请联系本人。

时间: 2025-01-11 03:02:58

Java 反射机制(二)的相关文章

java反射机制剖析(二)— Class Loader

上一篇博客简要的提了一下java反射机制中涉及到的一些相关知识,那么ClassLoader就是其中之一.本篇博客就详细的对ClassLoader做一个相对深入的了解.作为了解需要知道的是,其实类类型(Class Class)是和ClassLoader分不开的,因为ClassLoader需要的信息是由它提供的.类类型将在下一篇博客介绍. 简介 ClassLoader是负责加载类的对象,作用是根据Jvm请求提供的类信息,将请求的类加载的内存中或者说加载到Jvm中.另外,每一个类的Class对象(注意

java反射机制(一)—— 利用反射机制实例化对象

一.Java有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载.探知.使用编译期间完全未知的classes.换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体.或对其fields设值.或唤起其methods.(度娘文库是这么说的) 二.这篇文章主要介绍一下通过反射机制去实例化一个类的对象,然后调用其方法.本文主要介绍两种方式,第一种就是通过构造函数来实例化,第二种就是通过Cl

工厂类分离与java反射机制

网易 博客 发现 小组 风格 手机博客 玩LOFTER,免费冲印20张照片!> 创建博客登录 加关注 黙言-在路上 奋斗 首页 日志 相册 音乐 收藏 博友 关于我 黙言 加博友   关注他 他的网易微博 最新日志 Javascript 操作select控件 Oracle 存储过程基本语法 将域名和tomcat6进行绑定的 svn 423 Locked JS的trim()方法 jbpm4.4 结束流程时报错 随机阅读 让员工每年有一次机会当主角 外国女性如何舍身"套"色狼 亚洲电

Java反射机制(Reflection)

Java反射机制(Reflection) 一.反射机制是什么 Java反射机制是程序在运行过程中,对于任意一个类都能够知道这个类的所有属性和方法;对于任意一个对象都能够调用它的任意一个方法和属性,这种动态获取类信息以及动态调用对象方法的功能就是JAVA语言的反射机制. 二.反射机制能干什么 (1)在运行时判断任意一个对象所属的类 (2)在运行时构造任意一个类的对象 (3)在运行时判断任意一个类所具有的成员变量和方法 (4)在运行时调用任意一个对象的方法 (PS:注意反射机制都是在程序运行时,而不

Java知识总结:Java反射机制(用实例理解)

概念理解: 反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来 实现对自己行为的描述( self-representation )和检测( examination) ,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. Java中的反射是一个强大的工具,他能够创建灵活的代码,这些 代码可以在运行时装配,无需在组件之间进行链接,发射允许在编写和执行时,使程序代码能够接入装载到 JVM 中的类的内部信息 .而不是源代码中选定的类协作的代码.这使发射

【java基础】Java反射机制

一.预先需要掌握的知识(java虚拟机)  1)java虚拟机的方法区:  java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存储被装载的类 的类型信息,当java虚拟机装载某个类型的时候,需要类装载器定位相应的class文件,然后将其读入到java虚拟机中,紧接着虚拟机提取class 中的类型信息,将这些信息存储到方法区中.这些信息主要包括: 这个类型的全限定名 这个类型的直接超类的全限定名 这个类型是类类型还是接口类型

java反射机制浅谈

一.Java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动,说不定会请各位吃饭哦! 1.何谓反射机制 根据网文,java中的反射机制可以如此定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 2.反射

【54】Java反射机制剖析

java反射机制: 1.指的是可以于运行时加载,探知和使用编译期间完全未知的类. 2.程序在运行状态中, 可以动态加载一个只有名称的类, 对于任意一个已经加载的类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能调用他的任意一个方法和属性; 3.加载完类之后, 在堆内存中会产生一个Class类型的对象(一个类只有一个Class对象), 这个对象包含了完整的类的结构信息,而且这个Class对象就像一面镜子,透过这个镜子看到类的结构,所以被称之为:反射. 4.每个类被加载进入内存之后,系统

Java反射机制深入研究

ava 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”. 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的.这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制. Java 反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类. 在运行时构造任意一个类的对象. 在运行时判断任意一个类所具有的成员变量和方法. 在运行时调用任意一个对象的方

java反射机制(转)

一.什么是反射机制         简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,     那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制         有些时候,我们用过一些知识,但是并不知道它的专业术语是什么,在刚刚学jdbc时用过一行代码,     Class.forName("com.mysql.jdbc.Driver.class").newInstance();但是那时候只知道那行代码是生成     驱动对象实例