[Java基础]——类的生命周期

简介: [Java基础]——类的生命周期

一、 类的加载

1. 类加载器根据类的全限定名通过不同渠道以二进制流的方式获取字节码信息。

2. 类加载器加载完类之后,字节码信息(基本信息、常量池、字段、方法、虚方法表)会保存在JVM的方法区中。

3. 方法区生成一个InstanceKlass对象,保存类的信息,此外还会在堆中生成一个java.lang.class对象,我们使用的就是这个对象。

总结:

      Java虚拟机将类信息加载到内存中,一份在堆区、一份在方法区,我们开发使用的一般是堆区中的类。

二、类的连接

1. 验证类是否满足Java虚拟机规范

2. 给静态变量赋初值为0

3. 将常量池中的符号引用替换成指向内存的直接引用(就像字符串)

三、初始化

初始化就是执行静态代码块,或者为静态变量赋值。

以下几种情况会触发类的初始化:

1. 访问一个类的静态变量或者静态方法,注意->变量是final修饰的并且右边是常量不会触发初始化

2. 调用Class.forName()方法

3. new一个该类的对象时

4. 执行Main方法的当前类

笔试题:控制台输出什么

解析:

       main为程序入口,所以先加载Test1字节码文件并初始化,打印D, 然后又打印A,然后new Test1()执行构造方法,而{}代码块内容编译后是在构造代码的第一行先执行的。故答案为:DACCBCB

有继承的类的初始化

解析:

      ①子类继承父类,先初始化父类,在初始化子类

       ②对于成员变量,编译看左边运行看左边,对于方法,编译看左边,运行看右边

故:结果为2


如果没有new对象,成员变量是父类的,所以只初始化父类。a = 1

最后注意:

       数组的创建不会导类进行初始化

       静态变量使用final修饰,这类变量会在类加载阶段进行初始化

四、使用 五、回收

相关文章
|
4天前
|
Java 编译器 ice
【Java开发指南 | 第十五篇】Java Character 类、String 类
【Java开发指南 | 第十五篇】Java Character 类、String 类
24 1
|
4天前
|
Java
【Java开发指南 | 第十四篇】Java Number类及Math类
【Java开发指南 | 第十四篇】Java Number类及Math类
15 1
|
4天前
|
存储 Java
【Java开发指南 | 第七篇】静态变量生命周期、初始化时机及静态变量相关性质
【Java开发指南 | 第七篇】静态变量生命周期、初始化时机及静态变量相关性质
17 4
|
2天前
|
自然语言处理 Java API
Java 8的Stream API和Optional类:概念与实战应用
【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
24 7
|
2天前
|
设计模式 算法 Java
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
|
4天前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
11 2
|
4天前
|
安全 Java 开发者
Java一分钟之-Optional类:优雅处理null值
【5月更文挑战第13天】Java 8的`Optional`类旨在减少`NullPointerException`,提供优雅的空值处理。本文介绍`Optional`的基本用法、创建、常见操作,以及如何避免错误,如直接调用`get()`、误用`if (optional != null)`检查和过度使用`Optional`。正确使用`Optional`能提高代码可读性和健壮性,建议结合实际场景灵活应用。
21 3
|
4天前
|
存储 Java 索引
【Java开发指南 | 第十六篇】Java数组及Arrays类
【Java开发指南 | 第十六篇】Java数组及Arrays类
10 3
|
4天前
|
存储 缓存 Java
【Java开发指南 | 第六篇】Java成员变量(实例变量)、 类变量(静态变量)
【Java开发指南 | 第六篇】Java成员变量(实例变量)、 类变量(静态变量)
12 2
|
4天前
|
Java 编译器
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
11 4