《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()

 public String getName() {
if (name == null)
name = getName0();
return name;
} // cache the name to reduce the number of calls into the VM
private transient String name;
private native String getName0();

输出结果reflection.Employee

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

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

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

  其中传入的参数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 著    

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

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

  1. Java反射机制二 获取方法的返回值或参数的泛型信息

    在使用反射机制时,我们经常需要知道方法的参数和返回值类型,很简单  ,下面上示例,示例中的两个方法非常相似 package deadLockThread; import java.lang.refle ...

  2. 菜鸟学Java(十五)——Java反射机制(二)

    上一篇博文<菜鸟学编程(九)——Java反射机制(一)>里面,向大家介绍了什么是Java的反射机制,以及Java的反射机制有什么用.上一篇比较偏重理论,理论的东西给人讲出来总感觉虚无缥缈, ...

  3. Java反射机制demo(二)—通过Class实例化任意类的对象

    Java反射机制demo(二)—通过Class实例化任意类的对象 上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例. 任意一个类 ...

  4. Java反射机制剖析(二)-功能以及举例

    从<java反射机制剖析(一)>的API我们看到了许多接口和类,我们能够通过这些接口做些什么呢? 从上篇API中我们能看到它能够完成下面的这些功能: 1)     获得类 A.     运 ...

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

    上一篇博客简要的提了一下java反射机制中涉及到的一些相关知识,那么ClassLoader就是当中之中的一个.本篇博客就具体的对ClassLoader做一个相对深入的了解. 作为了解须要知道的是.事实 ...

  6. 夯实Java基础(二十一)——Java反射机制

    1.反射机制概述 Java反射机制是指程序在运行状态中,对于任何一个类,我们都能够知道这个类的所有属性和方法(包括private.protected等).对于任何一个对象,我们都能够对它的属性和方法进 ...

  7. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  8. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  9. java反射机制深入详解

    java反射机制深入详解  转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...

  10. [转]java反射机制

    原文地址:http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html 一.什么是反射机制         简单的来说,反射机制指的是程序在运 ...

随机推荐

  1. openStack cinder 在往虚拟机上挂载云磁盘时总是提示挂在错误 最后找到原因原来是指定挂载云磁盘的虚拟机被锁定

    openStack 虚拟机的锁定功能是一个为了保护虚拟机 被误删除的一项创新共! 在VMs锁定状态下,一大部分针对此锁定的虚拟机都是无法执行的!! 需要进行相应的操作前,请注意解锁指定虚拟机,操作完成 ...

  2. selectedIndex 属性可设置或返回下拉列表中被选选项的索引号。

    转自:https://blog.csdn.net/xxj19950917/article/details/73002046

  3. WPF访问UserControl的自定义属性和事件

    要实现外部窗体能直接访问UserControl的属性必须把UserControl的属性定义为依赖属性: 一,在UserControl.cs中为TextBox控件的Text建立依赖属性,输入" ...

  4. Spring入门第七课

    Bean之间的关系:继承和依赖. 继承Bean配置 Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父bean的Bean称为子Bean. 子Bean从父Bean中继承配置, ...

  5. HighChar

    chart: { type:'bar', borderWidth:2, borderColor: '#CA5100', backgroundColor: '#90ED7D', shadow: { // ...

  6. Git入门 时光穿梭鸡 版本回退 工作区 暂存区

    分布式集中式 CVS及SVN都是集中式的版本控制系统 , 而Git是分布式版本控制系统 集中式版本控制系统,版本库是集中存放在中央服务器的, 而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得 ...

  7. linux命令之ll按时间和大小排序显示

    ll不是命令,是ls -l的别名 按大小排序 [root@localhost ~]# ll -Sh 按时间排序 [root@localhost ~]# ll -rt ll -t 是降序, ll -t ...

  8. ue4 代码入门

    官网:暴露游戏元素给蓝图 https://docs.unrealengine.com/latest/CHN/Engine/Blueprints/TechnicalGuide/ExtendingBlue ...

  9. Unity 5 全局光照GI与新的烘焙系统初探

    http://blog.csdn.net/sparrowfc/article/details/45650013 GI是啥 Realtime GI,实时全局光照,听上去就是一个非常高大上的词,但是越高大 ...

  10. angular实现表格的全选、单选、部分删除以及全部删除

    昨天自己写了一小段js,在全选的时候有点儿小坑,然后,整理了一下.今天把它贴出来,希望以后还记得. 大家也可以去github上查看或下载:https://github.com/dreamITGirl/ ...