java类的生命周期

2023-11-18

如图:
这里写图片描述

1.加载

我们编写一个java的源文件,经过编译后生成一个后缀名为.class的文件,这结合四字节码文件,
java虚拟机就识别这种文件,java的生命周期就是class文件从加载到消亡的过程。
关于加载,其实,就是将源文件的class文件找到类的信息将其加载到方法区中,
然后在堆区中实例化一个java.lang.Class对象,作为方法区中这个类的信息的入口。
但是这一功能是在JVM之外实现的,主要的原因是方便让应用程序自己决定如何获取这个类,
在不同的虚拟机实现的方式不一定相同,hotspot虚拟机是采用需要时在加载的方式,
也有其他是先预先加载的。

2.连接

一般会跟加载阶段和初始化阶段交叉进行,过程由三部分组成:验证、准备和解析三步
(1)验证:确定该类是否符合java语言的规范,有没有属性和行为的重复,继承是否合理,总之,就是保证jvm能够执行
(2)准备:主要做的就是为由static修饰的成员变量分配内存,并设置默认的初始值
        默认初始值如下:
        1.八种基本数据类型默认的初始值是0
        2.引用类型默认的初始值是null
        3.有static final修饰的会直接赋值,例如:static final int x=10;则默认就是10

(3)解析:这一阶段的任务就是把常量池中的符号引用转换为直接引用,说白了就是jvm会将所有的类或接口名、字段名、方法名转换为具体的内存地址。

3.初始化

这个阶段就是将静态变量(类变量)赋值的过程,即只有static修饰的才能被初始化,执行的顺序就是:

父类静态域或着静态代码块,然后是子类静态域或者子类静态代码块

4.使用

在类的使用过程中依然存在三步:对象实例化、垃圾收集、对象终结

(1)对象实例化:就是执行类中构造函数的内容,如果该类存在父类JVM会通过显示或者隐示的方式先执行父类的构造函数,在堆内存中为父类的实例变量开辟空间,并赋予默认的初始值,然后在根据构造函数的代码内容将真正的值赋予实例变量本身,然后,引用变量获取对象的首地址,通过操作对象来调用实例变量和方法
(2)垃圾收集:当对象不再被引用的时候,就会被虚拟机标上特别的垃圾记号,在堆中等待GC回收
(3)对象的终结:对象被GC回收后,对象就不再存在,对象的生命也就走到了尽头

5.类卸载

即类的生命周期走到了最后一步,程序中不再有该类的引用,该类也就会被JVM执行垃圾回收,从此生命结束…

package com.etc.test;
class A{
    static int a;//类变量
    String name;
    int id;
    //静态代码块
    static{
        a=10;
        System.out.println("这是父类的静态代码块"+a);
    }
    //构造代码块
    {
        id=11;
        System.out.println("这是父类的构造代码块id:"+id);
    }
    A(){
        System.out.println("这是父类的无参构造函数");
    }
    A(String name){
        System.out.println("这是父类的name"+name);
    }
}
class B extends A{
    String name;
    static int b;
    static{
        b=12;
        System.out.println("这是子类的静态代码块"+b);
    }
     B(String name) {
        super();
        this.name = name;
        System.out.println("这是子类的name:"+name);
    }
}
public class Test666 {
public static void main(String[] args) {
    B bb=new B("GG");
}
}

输出的结果如下:

这是父类的静态代码块10
这是子类的静态代码块12
这是父类的构造代码块id:11
这是父类的无参构造函数
这是子类的name:GG

来源:https://www.cnblogs.com/ipetergo/p/6441310.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java类的生命周期 的相关文章

  • java类的生命周期

    如图 1 加载 我们编写一个java的源文件 经过编译后生成一个后缀名为 class的文件 这结合四字节码文件 java虚拟机就识别这种文件 java的生命周期就是class文件从加载到消亡的过程 关于加载 其实 就是将源文件的class文
  • Java接口以及static和final关键字

    Java接口以及static和final关键字 一 static 二 final 三 让final元素可以初始化 不用固定赋值 四 接口 五 抽象方法 六 接口能够创建对象吗 匿名内部类 七 另一实例 开锁 一 static static代
  • 今天发现rabbitMQ消息堆积

    发现有三十多万的消息堆积在10的queue里没有被消费 记录一下查看问题的步骤 1 jps 找出程序的PID 2 jstack PID 查看线程dump 发现rabbitMQ的consumer worker线程block住了 Thread
  • 必须掌握的hashcode()方法

    一 hashcode是什么 1 hash和hash表是什么 想要知道这个hashcode 首先得知道hash 通过百度百科看一下 hash是一个函数 该函数中的实现就是一种算法 就是通过一系列的算法来得到一个hash值 这个时候 我们就需要
  • mac上使用IntelliJ IDEA运行项目

    一 Mac OSX系统下安装Tomcat 1 下载Tomcat官方下载地址 2 解压Tomcat到目录 Library 中 并把文件夹名由 apache tomcat 6 0 16 改为 Tomcat 3 打开 应用程序 Applicati
  • 3、Java的If语句与For循环

    一 语句 条件语句 根据不同的条件 执行不同的语句 if if else if else if if else if else if else switch 循环语句 重复执行某些动作 for while do while 1 1 if语句
  • java基础:日志框架

    文章目录 一 日志技术的概述 二 日志技术体系 三 Logback日志框架 四 Logback快速入门 五 Logback 配置详解 5 1 输出位置 格式设置 5 2 对日志不同内容是否输出的控制 一 日志技术的概述 程序中的日志可以用来
  • 什么是多态?对于多态的理解....

    什么是多态 我们都知道面向对象有四个基本特性 抽象 封装 继承 多态 概括可以理解为 抽象 封装 继承 是多态的基础 多态是抽象 封装 继承的表现 多态 是Java中非常重要的一部分 简单理解 不同类的 对象 对同一消息 做出了不同的响应就
  • 剑指offer第二版面试题39:数组中出现次数超过一半的数字(java)

    题目描述 数组中有一个数字出现的次数超过数组长度的一半 请找出这个数字 例子说明 如输入一个长度为9的数组 1 2 3 2 2 2 5 4 2 由于数字2在数组中出现了5次 超过数组长度的一半 因此输出2 分析思路1 基于Partition
  • 集合addAll方法使用存在的问题。

    集合addAll 方法的时候 这里里有两个集合 集合2要拿到集合1中的元素 然后对集合2进行removeAll方法 结果集合1中的值也没有了 只是因为listTwo listOne 只是把集合1的引用给了集合2 集合1和集合2的引用是指向同
  • 【java基础】 方法,实参和形参,方法的重载,签名,递归

    目录 方法概念及使用 实参和形参的关系 重要 方法的重载 方法签名 简单了解 递归 简单介绍 方法概念及使用 方法就是一个代码片段 类似于 C 语言中的 函数 作用 是能够模块化的组织代码 当代码规模比较复杂的时候 做到代码被重复使用 一份
  • 一文彻底弄懂零拷贝原理

    零拷贝 零拷贝 Zero Copy 是一种 I O 操作优化技术 可以快速高效地将数据从文件系统移动到网络接口 而不需要将其从内核空间复制到用户空间 其在 FTP 或者 HTTP 等协议中可以显著地提升性能 但是需要注意的是 并不是所有的操
  • 《编写高质量代码:改善Java程序的151个建议》读书笔记

    编写高质量代码 改善Java程序的151个建议 秦小波 67个笔记 前言 本书附带有大量的源码 下载地址见华章网站www hzbook com 建议11 养成良好习惯 显式声明UID SerialVersionUID 也叫做流标识符 Str
  • 第一个java程序helloworld代码的编写

    第一个java程序helloworld代码的编写 文章目录 第一个java程序helloworld代码的编写 toc 一 项目 二 认识JVM JRE和JDK 2 1 JVM是什么 2 2 JVM的主要功能和作用 2 3 JRE和JDK J
  • java 模拟库存管理系统

    本案例要求编写一个程序 模拟库存管理系统 该系统内容主要包括 商品入库 商品显示 和删除商品功能 此程序用手机举例 此管理系统分别为两个类Phone 和Test类 Phone类 确定四个变量 类 1 生成空参数构造方法 2 全部参数的构造方
  • MVC模型图

    MVC图
  • Java中count++的坑

    最近做了一道题 非常容易落入陷阱 当count初始值为0 count count 和count count 运行出来的结果是不一样的 count count 运行出来的结果依旧为0 这是因为JVM运行时 会把count变量拷贝到到临时变量区
  • 求一个数组的最大值最小值及其下标

    求一个数组的最大值最小值及其下标 思路 假定一个数为最大值 如果有个数比假定的最大值还大 那么该数就为最大值 最小值同理 使用for循环 public class MaxMin public static void main String
  • SM2加解密、签名验签

    导论 SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法 在我们国家商用密码体系中被用来替换RSA算法 国产SM2算法 是基于ECC的 但二者在签名验签 加密解密过程中或许有些许区别 目前鄙人还不太清楚 后期有机会的话
  • 设计模式(2)

    2 2 结构型模式 结构型模式一共有七种 其中 适配器模式和装饰模式统称为包装模式 装饰模式和代理模式的类图基本相同 但目的不同 这些有相似目的或者有相似结构的模式需要对其概念辨析清楚 才能较好地掌握 下面将对结构型模式分别进行介绍 2 2

随机推荐

  • 题目:洛谷1088 火星人(排列组合问题)

    题目描述 人类终于登上了火星的土地并且见到了神秘的火星人 人类和火星人都无法理解对方的语言 但是我们的科学家发明了一种用数字交流的方法 这种交流方法是这样的 首先 火星人把一个非常大的数字告诉人类科学家 科学家破解这个数字的含义后 再把一个
  • homework03

    1 编写一个程序来读入不指定个数的整数 然后决定已经读取的整数中有多少个正数和多少个负数 并计算这些输入值 不统计0 的总和 最终得出它们的平均值 这个程序以输入值0来结束 使用浮点数显示这个平均值 a 0 b 0 sum 0 count
  • Python之ML--机器学习分类算法

    Python之ML 机器学习分类算法 介绍最早以算法方式描述的分类机器学习算法 感知器 perceptron 和自适应线性神经元 adaptive linear neuron 我们将使用python循序渐进地实现一个感知器 并且通过训练使其
  • VSCode与PyCharm提示unresolved import解决方案

    问题描述 在VScode或者pyharm中采用python import自定义模块是 有时会显示unresolved import警告并且 无法跳转到自定义模块函数定义 出现问题的原因 没有安装import对应的模块 import的文件夹没
  • 使用STM32的TIMER进行外部计数

    使用ETR引脚的输入信号作为计数时钟 本例程使用Timer 2 其ETR输入引脚为PA1 该引脚工作模式为输 入模式 Timer的工作模式为从模式 另外使用PC6输出一模拟方波时钟信号 测试时将PC6与PA1短接 用户也可另外连接一个时钟信
  • 简述反射机制

    一 什么是反射 1 1 反射 所谓框架的灵魂 框架 半成品软件 可以在框架的基础上进行软件开发 简化代码 反射 将类的各个组成部分封装为其他对象 反射机制 简单来说反射就是在程序运行期间 动态的获取类或者对象中的属性 什么是动态获取 反射的
  • Swift语法学习--类(class)

    文章目录 类 初始化及实例 类的引用 reference 特征 类和结构体比较 类属性的set和get方法解析 类属性的willSet和didSet方法解析 类的下标 类方法和静态方法 将一个类的实例作为另一个类的属性 类的继承 父类在实例
  • MATLABdiag()用法

    1 提取矩阵的对角线元素 设A为m n矩阵 diag A 函数用于提取矩阵A主对角线元素 产生一个具有min m n 个元素的列向量 diag A k 提取矩阵A第k条对角线的元素 产生一个列向量 注意 矩阵的对角线 与主对角线平行 往上为
  • Unity核心5——Tilemap

    Tilemap 一般称之为瓦片地图或者平铺地图 是 Unity2017 中新增的功能 主要用于快速编辑 2D 游戏中的场景 通过复用资源的形式提升地图多样性 工作原理就是用一张张的小图排列组合为一张大地图 它和 SpriteShape 的异
  • android Scrollview里的内容不停留在顶部的问题

    先说明一下 任何一个页面都应该按照布局的先后顺序来显示 我这出现的问题就是 Scrollview里面嵌套Listview的头布局一进来看不见了 直接被Listview把焦点给抢了 最先显示的是Listview的item部分 直接上图 解决代
  • React中的“计算属性”

    React中的 计算属性 相信许多学习过vue的小伙伴对计算属性都不陌生吧 计算属性能帮我们数据进行一些计算操作 计算属性是依赖于data里面的数据的 在vue中只要计算属性依赖的data值发生改变 则计算属性就会调用 那React中也有计
  • gsaop 有头文件生成wsdl文件

    gsoap ns service name name area gsoap ns service style rpc gsoap ns service encoding encoded gsoap ns service namespace
  • SSM框架之MyBatis(二)--多表查询及查询结果映射

    使用MyBatis这一强大的框架可以解决很多赋值的问题 其中对于子配置文件中的小细节有很多需要注意的地方 使用这个框架后主要就是对于配置文件的编写和配置 今天我写了一个多表查询 表的基本结构如下 用户表t user 用户编号uid 账号ac
  • CNN中特征融合的一些策略

    Introduction 特征融合的方法很多 如果数学化地表示 大体可以分为以下几种 X Y textbf X textbf Y X Y X
  • 12. Xaml Calendar控价 时间控件-->像挂历

    1 运行图片 2 运行源码 a xaml 源码
  • 通信原理复习(四)——基带数字信号的表示和传输

    数字信号传输的标志 1 除去直流分量和频率很低的分量 2 在接收端得到的每个码元的起止时刻信息 3 使信号的频谱和信道的传输特性相匹配 波形 1 单极性波形 只适合用导线连接的各点之间做近距离传输 0和 V V 2 双极性波形 取 V和 V
  • AD导入3D模型

    我之前写过一篇文章也是说AD的3D模型的 http blog csdn net tq384998430 article details 78614014 介绍的是使用AD自带的功能绘制3D模型 但是这样绘制出来的形状并不是很好看 如果导入元
  • el-table的无限滚动(效果比虚拟滚动更优)

    步骤 1 前端安装 save el table infinite scrol npm install save el table infinite scroll 2 全局引用 在main js中引用 import Vue from vue
  • C语言实现八进制转十进制

    八进制转十进制 include
  • java类的生命周期

    如图 1 加载 我们编写一个java的源文件 经过编译后生成一个后缀名为 class的文件 这结合四字节码文件 java虚拟机就识别这种文件 java的生命周期就是class文件从加载到消亡的过程 关于加载 其实 就是将源文件的class文