这一章节我们来讨论一下得到Class对象的另一种方式.class。
1.例子
package com.ray.ch12;
public class Test {
public static void main(String[] args) {
System.out.println(Person.class.getName());
}
}
class Person {
static {
System.out.println("loading person");
}
public Person() {
System.out.println("creating person");
}
}
输出:
com.ray.ch12.Person
通过这种方式一样可以得到Person类的Class对象的引用,但是从输出我们观察到,在得到引用的同时,Person是没有加载到类加载器里面。
其实,初始化类包含三个步骤:
(1)加载。找到.class文件,加载到类加载器里面
(2)链接。为静态属性或者方法分配空间。
(3)初始化。初始化静态属性或者方法,如果有父类,则需要初始化父类。
初始化是在静态方法或者非静态域进行首次引用时才执行。
由于上面的代码还没有执行到初始化这一步,因此,是不会有loading等信息的打印。
结论:使用.class只会得到Class的引用,而Class.forName除了得到引用,还进行了初始化。
package com.ray.ch12;
public class Test {
public static void main(String[] args) {
Class personClass = Person.class;
System.out.println(Person.id);
try {
Class personClass2=Class.forName("com.ray.ch12.Person");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Person {
public final static int id = 1;
static {
System.out.println("loading person");
}
public Person() {
System.out.println("creating person");
}
}
输出:
1
loading person
总结:这一章节结束了.class的使用以及跟Class.forName的区别。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...
用户可以轻松地导入现有的Java项目,或者从头开始创建新的项目,包括Maven或Gradle构建系统。 3. **构建工具**:Eclipse 集成了构建工具,如Ant和Maven,使得构建和管理项目依赖变得简单。对于现代Java开发,Maven...
1. **创建项目**:通过选择模板或从头开始,快速初始化一个Android项目。 2. **编写代码**:在IDE中编写Java或Kotlin代码,构建应用逻辑。 3. **设计界面**:使用XML或可视化工具设计用户界面,实现丰富的交互...
标题 "aip-java-sdk-4.2.0" 指的是一个针对Android平台的AIP(Artificial Intelligence Platform)SDK的特定版本,版本号为4.2.0。这个SDK是百度公司提供的,用于帮助开发者在Android应用程序中集成和使用百度的各种...
- **JSON或XML解析**:NTRIP数据可能以这两种格式传输,需要解析成Java对象。 - **Android权限管理**:可能需要获取网络访问权限。 - **线程管理**:网络操作通常在后台线程执行,防止UI阻塞。 - **异步处理**:如...
《Aspose.Words for Java 14.7.0:高效文档处理的利器》 Aspose.Words 是一款由 Aspose 公司开发的高级文档处理库,特别为 Java 平台设计。在这个版本 14.7.0 的 jar 包中,它提供了丰富的功能,使开发者能够方便地...
**Python库:Classy Core 0.2.0.dev20211229-py3-none-any.whl** 本文将深入探讨Python库“Classy Core”的详细内容,该库在开发过程中提供了名为“0.2.0.dev20211229-py3-none-any.whl”的特定版本。此版本是针对...
【标题】"Aspose.Words for Java 23.6 with JDK 17 Support" Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java ...
Aspose.Pdf是一款知名的Java库,专为处理PDF文档而设计。这个库的版本11.8.0,即“aspose.pdf-11.8.0.jar”,提供了丰富的功能,使得开发人员能够轻松地创建、修改、转换、打印以及在Java应用程序中集成PDF文档。...
3. **Jar文件**: "org.apache.poi.xwpf.converter.core-1.0.4.jar"是这个转换库的具体实现,包含了所有必需的类和方法,使得开发者可以在他们的项目中直接引用并使用转换功能。通常,你需要把这个jar文件添加到你的...
Constructs是AWS Cloud Development Kit (CDK)的核心概念,它是一种用高级语言定义基础设施的开发工具,如TypeScript、Python或Java。 在这个特定的版本1.54.0中,aws-lambda-s3构造体提供了预定义的模板,以便于...
Aspose.Words for Java是Aspose公司开发的一款强大的文档处理组件,主要针对Java开发者设计,用于在Java应用程序中创建、编辑、转换和呈现各种Microsoft Word文档格式。版本18.4是该组件的一个特定更新,提供了对新...
标题中的"PyPI 官网下载 | cpp-enum-class-string-idl-0.0.1.tar.gz"表明这是一个从Python Package Index(PyPI)官方源下载的软件包,名为"cpp-enum-class-string-idl",版本号为0.0.1。PyPI是Python社区用来分发和...
总结来说,这个压缩包提供了iText库的最新稳定版本,结合其亚洲语言支持扩展,使得Java开发者能够方便地创建和处理包含中文的PDF文档,无论是从头新建还是修改已有的PDF,都能得心应手。对于需要处理中文PDF的企业和...
【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...
《Aspose.Words 15.8.0 for Java:高效处理Word文档的利器》 在IT领域,处理文档是一项常见的任务,而Java开发者在处理Word文档时常常会依赖一些库来提高效率和便捷性。Aspose.Words是其中的一款强大工具,专为Java...
Java平台提供了一系列库来支持这些操作,本项目中涉及的主要有Spire.Doc、Spire.PDF以及Apache PDFBox。让我们详细探讨这些库的功能及其在Java开发中的应用。 首先,`Spire.Doc.jar`是Spire.Doc for Java的库文件,...
3. 使用客户端对象发送消息,SDK会处理网络通信和协议转换。 同时,Leancound的SDK可能还提供了事件监听器,使得开发者可以注册回调函数,以处理各种事件,如消息接收、用户在线状态改变等。这有助于实现更复杂的...
"Spire.Presentation.Free-5.1.0.jar" 是一个Java库,专门用于处理Microsoft PowerPoint格式的文件。这个库提供了丰富的API,使得在Java应用中创建、编辑和转换PPTX、PPT以及PPS文件变得轻而易举。在Java开发中,...
Commons IO是Java编程语言中的一个开源库,由Apache软件基金会维护。这个库提供了一系列与输入输出操作相关的实用工具类,极大地简化了Java程序员处理IO任务的复杂性。标题提到的"commons-io-2.4.jar"是这个库的一个...