对于每一个类型对象,java虚拟机都会实例一个不变的java.lang.Class的对象,用来提供运行时的信息检查.Class也提供了创建新的classes和对象的能力.更重要的是它是映射API的一个入口点.
在java.lang.reflect包下所有的类以及java.lang.reflect.ReflectPermission(当然它也是类),都没有一个公共的构造子.为了获取这些类的对象,Class类提供了相应的方法.所以我们说它是映射API的一个入口,正是基于此.
这里有几种方法来获取一个Class
Object.getClass()
如果一个对象实例可用,那么一个最简单的方法去获取它的Class就是去调用Object.getClass().当然这仅仅适合于继承至java.lang.Object引用类型.如
Class c = "foo".getClass();
再如获取虚拟机控制台的Class
Class c = System.console().getClass();
因为数组也是对象,所以可以对一个数组实例调用getClass()基本数据类型数组其Class分别是[C , [I, [S, [B等.
byte[] bytes = new byte[1024];
Class c = bytes.getClass();
枚举类型中A为E的一个实例所以返回的Class是类型E的Class
enum E { A, B }
Class c = A.getClass();
java.util.Set是java.util.HashSet的一个接口,用getClass()返回的值是java.util.HashSet
import java.util.HashSet;
import java.util.Set;
Set<String> s = new HashSet<String>();
Class c = s.getClass();
.class 语法
如果一个类型可用,但是没有实例,此时可以用类型名加".class"来获取Class,这也是最简单的方法去获取基本数据类型的Class如下 :
boolean b;
Class c = b.getClass(); // compile-time error
Class c = boolean.class; // correct
注意基本数据类型不是引用型的所以上一种会发生编译时错误.
Class c = java.io.PrintStream.class;
Class的变量c与类型java.io.PrintStream对应.
Class c = int[][][].class;
对多维数组也可以获取其Class
Class.forName()
如果一个类的完整名可用,可以使用Class的一个静态方法Class.forName()来获取对应的Class.不能用于基本数据类型.
如:
Class c = Class.forName("com.duke.MyLocaleServiceProvider");
这段语句会根据给定的全名来产生class
CLass cDoubleArray = Class.forName("[D");
获取double类型数组的Class,等同double[].class
Class cStringArray = Class.forName("[[Ljava.lang.String;");
获取二维String类型的class
适用于基本数据类型打包类的TYPE字段.
当然对于基本数据类型. class是一个更好的方法,但是也有一个另外的方法.在java.lang包下每一个基本数据类型以及void有一个打包类,它们用于对基本类型装箱到引用类型.每一个打包类包含一个叫作TYPE的字段等同于被打包的基本数据类型的Class.如:
Class c = Double.TYPE;
等同于
Class c = double.class;
间接返回Classes的方法
这里有几个获取classes的反射API,但是仅仅当有一个Class被获取后.如:
返回一个被给类的超类 Class.getSuperclass():
Class c = javax.swing.JButton.class.getSuperclass();
也就是先获取到javax.swing.JButton的Class然后在获取其父类的Class
Class.getClasses()返回指定类所有的公开的类,接口,以及枚举类型包括被继承的成员.
如:
Class<?>[] c = Character.class.getClasses();
Character包含两个成员类Character.Subset , Character.UnicodeBlock.
Class.getDeclaredClasses() :返回所有明确申明在这个类中的所有的类,接口,枚举,
如:Class<?>[] c = Character.class.getDeclaredClasses();
Character包含两个公共的成员类Character.Subset , Character.UnicodeBlock 和一个私有的Character.CharacterCache
可有的形式:
{ Class, java.lang.reflect. { Field, Method, Constructor } }.getDeclaringClass()
如:
import java.lang.reflect.Field;
Field f = System.class.getField("out");
Class c = f.getDeclaringClass();
得到System类型
Class.getEnclosingClass():返回这个类的直接的外部类
如:
Class c = Thread.State.class.getEnclosingClass();
返回State的外部类Thread
分享到:
相关推荐
当我们处理Web应用程序时,通常会将编译后的类文件(classes)打包到特定的目录结构中,例如`WebContent/WEB-INF/classes`。这个目录结构是符合Java EE规范的WAR包标准布局。现在我们来详细讨论如何使用Maven来实现...
赠送jar包:netty-transport-classes-epoll-4.1.73.Final.jar; 赠送原API文档:netty-transport-classes-epoll-4.1.73.Final-javadoc.jar; 赠送源代码:netty-transport-classes-epoll-4.1.73.Final-sources.jar;...
在Android系统中,APK应用程序的主要执行代码是以Dalvik虚拟机的字节码形式存储的,这些字节码被编译成一个名为`classes.dex`的文件。`classes.dex`包含了应用的所有类和方法,是理解APK工作原理的关键。本主题主要...
赠送jar包:netty-tcnative-classes-2.0.46.Final.jar; 赠送原API文档:netty-tcnative-classes-2.0.46.Final-javadoc.jar; 赠送源代码:netty-tcnative-classes-2.0.46.Final-sources.jar; 赠送Maven依赖信息...
在PCB编辑器中可以直接创建和编辑Component Classes,但需要注意的是,当你从原理图更新到PCB时,AD9默认会清除Component Classes。为了避免这种情况,你需要在项目选项(Project Options)的“Schematic Updates”...
赠送jar包:netty-transport-classes-epoll-4.1.73.Final.jar; 赠送原API文档:netty-transport-classes-epoll-4.1.73.Final-javadoc.jar; 赠送源代码:netty-transport-classes-epoll-4.1.73.Final-sources.jar;...
赠送jar包:netty-transport-classes-epoll-4.1.74.Final.jar; 赠送原API文档:netty-transport-classes-epoll-4.1.74.Final-javadoc.jar; 赠送源代码:netty-transport-classes-epoll-4.1.74.Final-sources.jar;...
`classes.dex`是APK中的核心部分,它包含了Java字节码,这些字节码经过Dalvik虚拟机的优化处理,使得Android设备能够运行应用。当我们需要查看或分析APK的源代码时,反编译就成为了一个重要的工具。本篇文章将深入...
Oracle的JDBC驱动程序"classes12"是用于与Oracle数据库进行交互的重要组件,它允许Java应用程序通过Java Database Connectivity (JDBC) API连接并执行SQL语句。在Java编程环境中,JDBC驱动程序扮演着桥梁的角色,...
### Keras中predict()方法与predict_classes()方法的区别详解 #### 概述 在深度学习领域,特别是使用Python进行开发时,Keras框架因其简洁易用的API而广受欢迎。Keras提供了丰富的功能来帮助开发者构建和训练各种...
《深入解析classes 12.jar:Java类库的奥秘》 在Java开发领域,`.jar`文件扮演着至关重要的角色。它代表了Java Archive,是Java平台的标准归档格式,用于封装多个类文件和相关的元数据。当我们提到`classes 12.jar`...
标题中的"android classes.jar 4.0-5.0"指的是Android操作系统的不同版本(从4.0到5.0)中的核心类库文件`classes.jar`。这个`classes.jar`包含了Android系统运行所需的Java类,是Android SDK的重要组成部分。在...
《深入解析classes14.jar:解决Oracle字符集不兼容问题》 在Java开发过程中,我们经常需要处理与数据库的交互,而Oracle作为广泛使用的数据库系统,其与Java的集成是必不可少的一部分。然而,在实际操作中,开发者...
赠送jar包:netty-transport-classes-kqueue-4.1.73.Final.jar; 赠送原API文档:netty-transport-classes-kqueue-4.1.73.Final-javadoc.jar; 赠送源代码:netty-transport-classes-kqueue-4.1.73.Final-sources....
赠送jar包:netty-transport-classes-kqueue-4.1.74.Final.jar; 赠送原API文档:netty-transport-classes-kqueue-4.1.74.Final-javadoc.jar; 赠送源代码:netty-transport-classes-kqueue-4.1.74.Final-sources....
在Oracle环境中,"classes12.jar"是一个关键的Java类库,它包含了Oracle JDBC驱动程序,用于Java应用程序与Oracle数据库进行交互。这个库文件在Oracle 9i及之后的版本中被广泛使用,对于开发人员来说是非常重要的。 ...
赠送jar包:netty-transport-classes-kqueue-4.1.73.Final.jar; 赠送原API文档:netty-transport-classes-kqueue-4.1.73.Final-javadoc.jar; 赠送源代码:netty-transport-classes-kqueue-4.1.73.Final-sources....
赠送jar包:netty-tcnative-classes-2.0.46.Final.jar; 赠送原API文档:netty-tcnative-classes-2.0.46.Final-javadoc.jar; 赠送源代码:netty-tcnative-classes-2.0.46.Final-sources.jar; 赠送Maven依赖信息...
android源码中Framework层中的classes.jar包,应很多不愿下载android源码的童鞋的要求共享出来~
Oracle-classes14.jar.jar.rar 是一个压缩文件,包含了Oracle数据库相关的类库,特别是 `classes14.jar` 文件。这个文件通常与Oracle JDBC驱动程序有关,JDBC(Java Database Connectivity)是Java语言用来连接...