很多初学者弄不清楚实例化和类装载(类加载)的区别,其实只要通过这两个小小的程序就明白了
public class LoadClass {
/**
* 测试类装载与实例化的区别
*/
public static void main(String[] args) throws ClassNotFoundException {
Class.forName("Boy");
//Class.forName(" ") 作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段
}
}
class Boy {
static {
System.out.println("类装载");
}
Boy() {
System.out.println("实例化");
}
}
运行这段程序的时候你可以发现控制台打印仅仅是static块里面的--“类装载”,当然也如你所想得不会打印“实例化了”
我们可以得出类先被装载,Java虚拟机(JVM)的类装载就是指将包含在类文件中的字节码装载到JVM中, 并使其成为JVM一部分的过程,但装载的时候却没有被实例化
第二个程序也容易让人明白类装载与实例化的关系了
public class MyStatic {
public MyStatic () {
System.out.println("构造方法--类实例化时调用");
}
public static void doWork() {
System.out.println("doWork");
}
public static void MyStatic () {
System.out.println("static void 方法");
}
static {
System.out.println("static 块 这是在类装载的时候调用");
}
}
public class TestMyStatic {
public static void main(String []args) {
new MyStatic();
}
}
这时,程序打印的是:
static 块 这是在类装载的时候调用
构造方法--类实例化时调用
注意打印的顺序,当然了先是类装载再实例化的
可以看到在调用一个类的构造方法的时候及new一个对象的时候,这时候jvm就会实例化给对象
另外这里有两篇文章
Java虚拟机类装载--原理、实现与应用
Java的对象实例化顺序
分享到:
相关推荐
- **模块化加载**:通过不同的类装载器实例来加载不同的模块,从而实现系统的模块化管理。 #### 结论 类装载器是Java平台中极其重要的一部分,它不仅支撑着Java程序的动态性和安全性,还为开发高度灵活、安全和可...
#### Java虚拟机的类装载实现与应用 ##### 装载过程简介 **装载**是指将类或接口的二进制形式(通常为`.class`文件)导入到JVM中,并创建相应的`Class`对象的过程。这个过程通常包括三个主要步骤:装载、链接和...
Java 类装载过程是Java虚拟机(JVM)运行的核心机制之一,主要涉及到类从加载到初始化的完整生命周期。这一过程确保了程序的正确运行,并在安全性方面起到关键作用。以下是详细的解释: 1)装载(Loading): 在这...
Android基于类装载器插件架构的实现主要涉及到Android系统中类的动态加载与插件化架构的设计。在Android开发中,由于APK包的独立性和Android系统对安全性的严格限制,传统的插件化技术在动态加载外部模块时面临着...
实例化前初始化 类装载时分配空间 多个对象共享同一内存空间 不能被垃圾收集线程收集 静态代码块 装载时运行 在main 之前 只运行一次 下次类再装载或创建对象时不运行 静态方法 类名调用(推荐) 实际也...
模板在编译时会产生多个实例化代码,这些实例在链接时会被合并;异常处理机制需要链接器确保每个函数的异常表正确对齐。 现在,我们来看一下压缩包中的文件名称列表,虽然它们是图片文件,但从名称推测可能包含PPT...
当启动一个Java应用时,实际上是在与三种类型的类装载器进行交互: 1. **引导程序类装载器(Bootstrap Class Loader)**:这是默认的第一个类装载器,用于加载Java的核心类库,如`java.lang`包中的类。引导程序类装载...
我们可以使用GestureStore实例化一个GestureLibrary对象,然后调用其`loadGestures()`方法加载手势文件。 4. **识别手势**:一旦手势库加载完成,我们就可以在GestureOverlayView上监听用户的画布动作。当用户在...
5. **装载器的运作机制**:如何在内存中安排程序,以及如何处理程序的入口点和初始化。 6. **动态链接**:解释了DLL(动态链接库)或SO(共享对象)的概念,以及它们如何在运行时被加载和使用。 7. **调试信息**:...
例如,当类模板被不同源文件使用时,链接器需要确保所有实例化都是唯一的。 装载,即程序在运行时加载到内存的过程,是操作系统负责的。在Linux系统中,这个过程由动态链接器(通常是ld-linux.so)完成。装载过程中...
在IT领域,优化问题是一个广泛研究的课题,而“集装箱的装载问题”是其中的一个典型实例,涉及到空间利用效率最大化的问题。这个问题的核心是如何在给定的三维空间内,有效地安排一系列圆柱形物体(在这里是木材)以...
### 货物装载问题与回溯法:深入解析与应用 #### 1. 回溯法概述 回溯法是一种高效且具有普遍适用性的算法,尤其在解决那些解空间较大,难以找到直接求解公式的问题时表现出色。它的工作原理基于深度优先搜索策略,...
本报告通过一个具体的实例,利用贪心算法来解决最优装载问题,并通过C++语言实现了相应的算法。 #### 问题描述 假设有一艘轮船,其载重限制为`c`,现在有`n`个集装箱,每个集装箱的重量分别为`a[1]`、`a[2]`、......
在装载镜像和重装系统的过程中,这类工具能提供便捷的环境隔离和管理功能。 总的来说,装载镜像和重装系统是IT维护和管理中的关键操作,涉及到了系统安装、数据安全、硬件驱动等多个方面。熟练掌握这些技能对于IT...
* 隐式类装载发生在由于引用、实例化或继承导致需要装载类的时候。隐式类装载是在幕后启动的,JVM会解析必要的引用并装载类。类的装载通常组合了显式和隐式两种方式。例如,Classloader可能先显式地装载一个类,然后...
《玻璃装载机——基于三菱PLC与威纶通触摸屏的自动化系统详解》 在现代工业生产中,自动化设备的应用日益广泛,其中PLC(可编程逻辑控制器)和触摸屏技术是实现设备智能化的重要手段。本项目以"玻璃装载机"为例,...
【ANSYS Workbench在装载机动臂结构参数优化中的应用】 装载机动臂是装载机工作装置的关键组成部分,其性能直接影响装载机的整体工作效率。传统的设计方法往往为了确保动臂的刚度和强度,会在材料厚度上预留较大的...
根据给定的信息,本文将详细解释如何使用C++与回溯法解决装载问题,并通过具体的代码实例进行解析。 ### 回溯法概述 回溯法是一种在搜索解空间树过程中寻找问题解的方法。它通常用于解决约束满足问题,如装载问题...
在给定的代码中,`Loading` 类模板用于表示装载问题的实例,包含数据成员如集装箱的重量数组 `w`,船只的载重量 `c`,当前重量 `cw`,最佳载重量 `bestw`,剩余重量 `r`,以及一个 `x` 数组来记录每个集装箱的装载...