[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修饰,这类变量会在类加载阶段进行初始化

四、使用 五、回收

相关文章
|
8月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
410 101
|
8月前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
352 100
|
7月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
284 4
|
7月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
336 5
|
7月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
417 5
|
7月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
347 1
|
7月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
470 1
|
7月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
303 1
|
7月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
342 1
|
7月前
|
机器学习/深度学习 人工智能 监控
Java与AI模型部署:构建企业级模型服务与生命周期管理平台
随着企业AI模型数量的快速增长,模型部署与生命周期管理成为确保AI应用稳定运行的关键。本文深入探讨如何使用Java生态构建一个企业级的模型服务平台,实现模型的版本控制、A/B测试、灰度发布、监控与回滚。通过集成Spring Boot、Kubernetes、MLflow和监控工具,我们将展示如何构建一个高可用、可扩展的模型服务架构,为大规模AI应用提供坚实的运维基础。
517 0