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()
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 反射机制(二)的更多相关文章
- Java反射机制二 获取方法的返回值或参数的泛型信息
在使用反射机制时,我们经常需要知道方法的参数和返回值类型,很简单 ,下面上示例,示例中的两个方法非常相似 package deadLockThread; import java.lang.refle ...
- 菜鸟学Java(十五)——Java反射机制(二)
上一篇博文<菜鸟学编程(九)——Java反射机制(一)>里面,向大家介绍了什么是Java的反射机制,以及Java的反射机制有什么用.上一篇比较偏重理论,理论的东西给人讲出来总感觉虚无缥缈, ...
- Java反射机制demo(二)—通过Class实例化任意类的对象
Java反射机制demo(二)—通过Class实例化任意类的对象 上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例. 任意一个类 ...
- Java反射机制剖析(二)-功能以及举例
从<java反射机制剖析(一)>的API我们看到了许多接口和类,我们能够通过这些接口做些什么呢? 从上篇API中我们能看到它能够完成下面的这些功能: 1) 获得类 A. 运 ...
- java反射机制剖析(二)— Class Loader
上一篇博客简要的提了一下java反射机制中涉及到的一些相关知识,那么ClassLoader就是当中之中的一个.本篇博客就具体的对ClassLoader做一个相对深入的了解. 作为了解须要知道的是.事实 ...
- 夯实Java基础(二十一)——Java反射机制
1.反射机制概述 Java反射机制是指程序在运行状态中,对于任何一个类,我们都能够知道这个类的所有属性和方法(包括private.protected等).对于任何一个对象,我们都能够对它的属性和方法进 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- java反射机制深入详解
java反射机制深入详解 转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...
- [转]java反射机制
原文地址:http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html 一.什么是反射机制 简单的来说,反射机制指的是程序在运 ...
随机推荐
- Ajax学习(1)
Web 1.0 它指的就是具有完全不同的请求和响应模型的传统 Web.比如,到 hdu.edu.cn 网站上点击一个按钮.就会对服务器发送一个请求,然后响应再返回到浏览器.该请求不仅仅是新内容和项目列 ...
- URL shortening service
Use Cases 1, shortening : take a URL => return a much shorter URL 2, redirection : take a short U ...
- gSoap使用入门(2)----自定义接口头文件
摘自:http://blog.csdn.net/zhuzhihai1988/article/details/8131556 接口头文件的格式在向导中没有看到明确的说明性的内容,但通过看开发包中示例程序 ...
- c/c++语言实现tesseract ocr引擎编程实例
编译下面的程序操作系统必须在安装了tesseract库和leptonica库才可以 Basic example c++ code: #include <tesseract/baseapi.h&g ...
- 7.22实习培训日志-JSP Servlet
周末总结 今天下午在学习servlet,想自己做一个简单的例子,于是用idea新建一个maven项目,为了后文叙述方便,我们取名为项目1,点击create from archetype,我先选择org ...
- HDU - 2689 Sort it与2016蓝桥杯B 交换瓶子 排序(相邻交换与任意交换)
Sort it You want to processe a sequence of n distinct integers by swapping two adjacent sequence ele ...
- js如何判断当前文本的输入状态——中文输入法的那些坑
相信各位在平时接需求的时候肯定会遇到这样的一些需求,例如,要求输入框限制输入长度,限制输入类型,限制只能英文输入,限制只能输入大写字母等等,这时候我们一般的思路无非两种,一种是弹出特定的键盘,第二种是 ...
- 初识Kotlin之集合
Kotlin的集合是让我为之心动的地方,丰富的高阶函数帮助我们高效开发.今天介绍Kotlin的基础集合用法.获取集合元素的函数.过滤元素的函数.元素排序的函数.元素统计的函数.集合元素映射的函数.集合 ...
- HDU 1506【单调栈】
思路: 转化成对于某一位置为最小值求向两边最远>=他的位置,用单调栈就能轻易完成. 那么ans=(left+right)*h[i]; 维护单调递增还是递减呢? 我们能很快反应到,一旦碰到一个比他 ...
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - filter(5)
自定义fieldType时,通常还会用到filter.filter必须跟在tokenizer或其它filter之后.如: <fieldType> <analyzer> < ...