这一章节我们来介绍一下Class对象。
在介绍前有几点需要注意的:
1.每一个类都有一个Class对象,在jvm的类加载器子系统里面生成。
2.类加载器子系统包含类加载器链,但是只有一个原生加载器,原生加载器主要加载javaapi里面的可信的类。
3.只有当类被使用的时候才会加载,这个称之为动态加载。
4.只有加载了Class,才能new这个类的所有对象。
由于前面几点都暂时没有办法证明,只能当概念记住,我们下面举例说明最后一点:
package com.ray.ch11;
public class Test {
public static void main(String[] args) {
new A();
try {
Class.forName("com.ray.ch11.B");//需要包名+类名
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class A {
static {
System.out.println("loading A");
}
public A() {
System.out.println("created A");
}
}
class B {
static {
System.out.println("loading B");
}
public B() {
System.out.println("created B");
}
}
输出:
loading A
created A
loading B
注意:在使用Class.forName的时候后面的字符串需要全名(包名+类名)。
从输出看见,create在load之后,证明了上面的描述,类是先加载后创建对象的。而在只是使用Class.forName的B中,其实只是加载B这个类,而且取得B类型的Class对象的引用(B类在加载的同时已经创建的B的Class对象),而没有创建任何B的对象。
除了Class.forName可以获取B类型的Class对象的引用,也可以通过B的对象那里获取,还可以在B.getClass()这里获取,我们下面举例:
package com.ray.ch11;
public class Test {
public static void main(String[] args) {
B b = new B();
System.out.println(b.getClass().getName());
System.out.println(B.class.getName());
}
}
class B {
static {
System.out.println("loading B");
}
public B() {
System.out.println("created B");
}
}
输出:
loading B
created B
com.ray.ch11.B
com.ray.ch11.B
总结:这一章节我们简单的讲述了Class对象的概念与使用情况,我们下一章节将会继续讲述Class对象的使用以及一些注意的地方。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...
1. **代码编辑器**:Eclipse 提供了一个强大的Java代码编辑器,支持语法高亮、自动完成、错误检查以及重构功能。它可以智能感知上下文并提供有用的提示,帮助开发者提高编码效率。 2. **项目管理**:Eclipse IDE...
- **JSON或XML解析**:NTRIP数据可能以这两种格式传输,需要解析成Java对象。 - **Android权限管理**:可能需要获取网络访问权限。 - **线程管理**:网络操作通常在后台线程执行,防止UI阻塞。 - **异步处理**:如...
标题 "aip-java-sdk-4.2.0" 指的是一个针对Android平台的AIP(Artificial Intelligence Platform)SDK的特定版本,版本号为4.2.0。这个SDK是百度公司提供的,用于帮助开发者在Android应用程序中集成和使用百度的各种...
1. **文档创建**:支持从头创建新的文档,或基于现有模板生成文档。 2. **文档读取和解析**:能够打开并读取多种格式的文档,如DOCX、DOC、RTF、PDF、HTML等。 3. **格式转换**:可以在不同文件格式之间进行转换,...
在Java编程中,多文件...通过这个"java-多文件上传dome"工具包,你可以快速实现上述功能,无需从头编写所有代码。不过,记得在实际项目中,除了功能实现,还要关注性能、安全性和可维护性,确保应用程序的稳定运行。
【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...
Java Swing是Java GUI(图形用户界面)开发的一个重要组件,它是Java Foundation Classes (JFC)的一部分,用于构建桌面应用程序。Swing提供了丰富的组件库,允许开发者创建美观且功能丰富的交互式用户界面。在这个...
Java是一种广泛使用的面向对象的编程语言,其特点包括抽象、继承、封装和多态性。在Java笔试中,这些概念经常被考察。 1. **面向对象的特征**: - **抽象**:抽象是将复杂问题简化的过程,分为过程抽象(方法)和...
1. 创建一个Leancound客户端对象,设置API密钥和应用ID。 2. 创建一个消息对象,指定接收者和消息内容。 3. 使用客户端对象发送消息,SDK会处理网络通信和协议转换。 同时,Leancound的SDK可能还提供了事件监听器,...
在Java编程中,库(Library)是预先编写好的代码集合,程序员可以导入并直接使用,无需从头开始编写所有功能。这些库通常以JAR(Java Archive)文件的形式存在,里面封装了类和方法,可供应用程序调用。Java库广泛...
1. **创建文档**:通过API,开发者能够从头开始构建Word文档,包括添加文本、图片、表格、形状、页眉和页脚等元素。 2. **编辑现有文档**:能够打开和修改现有的DOC或DOCX文件,进行内容替换、格式调整、页面布局...
【标题】:“curso-java-pildorasInf:从头开始学习Java” 这门“从头开始学习Java”的课程,源自"PillsInformática"的教育资源,旨在为初学者提供全面的Java编程知识。Java是一种广泛使用的面向对象的编程语言,由...
1. **源代码**:这是实现模糊视图背景的核心部分,可能包含Java类和方法,用于处理图像并应用模糊效果。 2. **示例应用**:可能包含一个简单的Java应用,演示如何使用库来创建模糊视图背景,这对于开发者理解和学习...
1. 创建新文档:从头开始创建Word文档,设置页面布局、字体样式、段落格式等。 2. 编辑现有文档:加载现有的Word文件并修改内容,包括文本、图像、表格、页眉页脚等元素。 3. 转换文档:将Word文档转换为其他格式,...
标题中的"java-leetcode题解之第21题合并两个有序链表.zip"指的是一个Java编程语言实现的LeetCode算法题解,具体是第21题——“合并两个有序链表”。这道题目要求我们将两个已排序的链表合并为一个新的已排序链表并...
【标题】"ks-java-lib:包含 Java 的 KS 库" 提供的是一个专门为 Java 开发者设计的库,它扩展了 Java 的功能,为开发者在处理特定任务时提供了便利。这个库可能包含了丰富的类和方法,旨在简化开发过程,提高代码的...
Java-Kencie 简介 Java-Kencie 是一个基于 Spring Boot 和 MyBatis 的入门级项目,旨在引导读者快速构建一个基于 Spring Boot 和 MyBatis 的应用程序。本文将从头开始,指导读者创建一个基本的 Spring Boot 工程,...
Java编程大师班的“模块6 OOP第1部分 - 类,构造函数和继承”是针对软件开发人员设计的一门深入课程,旨在提升他们对面向对象编程的理解和实践能力。在这个模块中,我们将聚焦于Java语言的核心特性,特别是类、构造...