Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识。这项信息纪录了每个对象所属的类。虚拟机通常使用运行时类型信息选 准正确方法去执行,用来保存这些类型信息的类是Class类。Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对象。
虚拟机为每种类型管理一个独一无二的Class对象。也就是说,每个类(型)都有一个Class对象。运行程序时,Java虚拟机(JVM)首先检查是否 所要加载的类对应的Class对象是否已经加载。如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。
基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也都对应一个 Class 对象。
每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
一般某个类的Class对象被载入内存,它就用来创建这个类的所有对象。 一、如何得到Class的对象呢?有三种方法可以的获取:
1、调用Object类的getClass()方法来得到Class对象,这也是最常见的产生Class对象的方法。例如:
MyObject x;
Class c1 = x.getClass();
2、使用Class类的中静态forName()方法获得与字符串对应的Class对象。例如:
Class c2=Class.forName("MyObject"),Employee必须是接口或者类的名字。
3、获取Class类型对象的第三个方法非常简单。如果T是一个Java类型,那么T.class就代表了匹配的类对象。例如
Class cl1 = Manager.class;
Class cl2 = int.class;
Class cl3 = Double[].class;
注意:Class对象实际上描述的只是类型,而这类型未必是类或者接口。例如上面的int.class是一个Class类型的对象。由于历史原因,数组类型的getName方法会返回奇怪的名字。 二、Class类的常用方法
1、getName()
一个Class对象描述了一个特定类的属性,Class类中最常用的方法getName以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。 2、newInstance()
Class还有一个有用的方法可以为类创建一个实例,这个方法叫做newInstance()。例如:
x.getClass.newInstance(),创建了一个同x一样类型的新实例。newInstance()方法调用默认构造器(无参数构造器)初始化新建对象。 3、getClassLoader()
返回该类的类加载器。 4、getComponentType()
返回表示数组组件类型的 Class。 5、getSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。 6、isArray()
判定此 Class 对象是否表示一个数组类。 三、Class的一些使用技巧
1、forName和newInstance结合起来使用,可以根据存储在字符串中的类名创建对象。例如
Object obj = Class.forName(s).newInstance(); 2、虚拟机为每种类型管理一个独一无二的Class对象。因此可以使用==操作符来比较类对象。例如:
if(e.getClass() == Employee.class)...
原文:http://lavasoft.blog.51cto.com/62575/15433
相关推荐
当我们使用`Class.forName()`加载类时,Java虚拟机(JVM)会解析类的字节码,生成对应的`Class`对象。这个过程涉及到类加载器(ClassLoader),它是JVM的一部分,负责查找和加载类。 在`java.lang.Class`中,`new...
《java_lang包详解》 Java语言的核心库之一就是java.lang包,它包含了Java程序中最基础、最...在编写Java程序时,无论何时何地,你都有可能需要用到java.lang包中的类和接口,因此深入学习和掌握这个包是至关重要的。
Apache Commons Lang是一个非常重要的Java库,它为Java标准类库提供了许多实用的工具类和扩展。这个资源包包含了丰富的功能,极大地增强了Java开发者的生产力。标题中的"org.apache.commons.lang包"指的是该库的主要...
在"JBuider第六章:Java.lang包"的教程中,你可能会深入学习到以下几个关键知识点: 1. **基础类和接口**:Java.lang包中的基础类包括`Object`、`String`、`Integer`、`Boolean`等,它们构成了Java类层次结构的基础...
在Java编程中,`NoSuchMethodException` 是一个常见的运行时异常,它发生在尝试调用一个不存在的方法时。这个异常属于`java.lang...同时,深入学习Java反射和动态代理等相关知识,可以增强我们处理复杂编程场景的能力。
理解并熟练使用`JSONObject`可以极大地提高开发效率,同时Fastjson库还提供了其他丰富的功能,如处理JSON数组`JSONArray`、处理日期、自定义序列化和反序列化等,这都需要开发者根据具体需求去深入学习和掌握。
Java中的`java.lang.Void`类是一个特殊的类,它在Java标准库中扮演着重要的角色,尤其是在处理泛型和反射时。`Void`类是不可实例化的,它的...理解`Void`类及其用法对于深入学习Java的类型系统和API的使用至关重要。
8. **类加载器问题(Class Loading)** - 原因:类的加载顺序不正确,导致类冲突。 - 解决方案:理解双亲委派模型,自定义类加载器时需谨慎,避免类加载器间的循环引用。 9. **反射与安全性(Reflection and ...
在Java编程语言中,`ClassNotFoundException`是一个非常常见的运行时异常,它属于`java.lang.ClassNotFoundException`,当Java虚拟机(JVM)试图动态加载一个类并无法找到对应的.class文件时,就会抛出这个异常。...
Ace 1 SE Java类库是Java开发者的重要资源,它包含了用于构建Java Standard Edition(SE)应用程序的各种类和接口...通过深入学习和实践,开发者可以有效地利用这些类库提升工作效率,编写出高效、健壮的Java应用程序。
例如,`java.lang`包是最基础的包,包含了一些基本类型类的包装类,如`Integer`、`String`,以及系统相关的类,如`System`、`Class`。`java.util`包提供了集合框架、日期时间、队列、映射等工具类。`java.io`和`java...
然而,对于开发者来说,理解rt.jar中包含的源码对于深入学习Java和进行调试工作至关重要。 rt.jar包含了Java语言的基础类库,如`java.lang`、`java.io`、`java.util`等包,这些包提供了基本的数据类型、异常处理、...
"Java_class_CHINESE.rar_class_java chm_java 类库"是一个压缩包,其中包含了Java类库的中文版帮助文档,这对于初学者来说无疑是一个极其宝贵的资源,能够帮助他们理解和掌握Java编程。 Java类库主要由Java标准版...
3. **通过`Class`类的静态方法`forName()`获取**:如`Class.forName("java.lang.String")`。 #### 六、动态加载类 动态加载类是Java反射机制的重要应用场景之一。通过`Class.forName()`方法或者`ClassLoader`的`...
`java.lang.reflect`和`java.lang.Class`类是反射的主要接口,泛型在`java.util`包的集合类中广泛应用。 通过深入学习和理解Java官方中文API,开发者可以掌握Java编程的基本语法和高级特性,从而编写出高效、稳定的...
通过深入学习和理解Java API,开发者可以有效地利用这些工具和机制,提高代码的可读性、可维护性和性能。同时,官方文档中的示例代码也是理解和应用这些API的重要资源。在实际开发中,遇到问题时,查阅Java API文档...
Java API是Java应用程序编程接口的简称,它是Java语言的核心组成部分...通过深入学习和实践,开发者可以充分利用Java API来创建复杂的应用程序,提高代码的复用性和可维护性,从而在软件开发领域取得更高的效率和质量。
- `Class.newInstance()`方法:通过类对象创建该类的一个实例,要求该类有一个无参构造方法。 - 类路径(classpath):JVM通过类路径来查找类文件,包括JAR包、目录等。类路径可以通过`-cp`或者`-classpath`命令行...
2. 实例化一个类的对象,通过`Class.forName()`,`new TestReflect().getClass()`或直接使用`TestReflect.class`等方式。 3. 查找类的父类和实现的接口,使用`getSuperclass()`和`getInterfaces()`方法。 此外,...