java类的加载以及初始化顺序

Codesys电子凸轮Cam表实战:从可视化配置到程序化构建 本文详细介绍了Codesys电子凸轮Cam表的实战应用,从可视化配置到程序化构建的全过程。通过包装机和印刷机案例,解析Cam表的基础设置、调试技巧及动态构建方法,帮助工程师快速掌握电子凸轮技术,提升运动控制精度和效率。 阅读详情

加载顺序:

类的静态成员初始化分配内存(有父类的先父类,然后自己)->然后main方法执行->类初始化{类非静态成员的初始化,然后执行构造器(有父类的先给父类的非静态成员初始化,然后父类的构造器)


转载:

类的加载和初始化的了解对于我们对编程的理解有很大帮助,最近在看类的记载方面的问题。从网上查阅了若干文章,现总结如下:

我们通过一段代码来了解类加载和初始化的顺序:

package com.classloader.demo;


class Insect {
  private int i = 9;
  protected int j;
  Insect() {
    System.out.println("i = " + i + ", j = " + j);
    j = 39;
  }
  private int p=print(" Insect.p initialized");
  private static int x1 =print("static Insect.x1 initialized");
  static int print(String s) {
    System.out.println(s);
    return 47;
  }
}


public class Beetle extends Insect {
  private int k = print("Beetle.k initialized");
  public Beetle() {
    System.out.println("k = " + k);
    System.out.println("j = " + j);
  }
  private static void dd()
  {
 System.out.println("dd ");
  }
  private static  int x2 =
    print("static Beetle.x2 initialized");
  public static void main(String[] args) {
    System.out.println("Beetle constructor");
    Beetle b = new Beetle();
    
  }
} 
本程序的运行结果如下:
static Insect.x1 initialized
static Beetle.x2 initialized
Beetle constructor
 Insect.p initialized
i = 9, j = 0
Beetle.k initialized
k = 47
j = 39


首先当我们运行此程序的时候,主线程启动,编译器开始查找Beetle.class这个类,找到这个类后,开始加载这个类,在加载的过程发现有extends关键字,所以编译器开始去加载insect.class这个类,(如果在加载这个类的时候如果发现这个类还有基类,那么insect的直接基类就会被加载,如果还有基类,以此类推)此时因为insect没有基类了,所以不需要再加载,此时(加载insect类时)insect类的静态代码将执行(静态成员的初始化),所以此时打印出了  static Insect.x1 initialized, 当insect的静态代码执行完后, Beetle的静态代码开始执行 (初始化x2), 所以打印出:static Beetle.x2 initialized;

到现在为止,所有基类以及静态的初始化动作都已经执行完了,可以创建对象了。

这时候执行System.out.println("Beetle constructor");所以打印出:Beetle constructor;

下面开始执行Beetle b = new Beetle();此时首先为Beetle分配内存空间,并且都初始化为0,注意boolean类型变量初始化为false;

在Beetle内的代码执行前,首先会调用基类的构造器,在基类(insect)的构造器内的代码执行前,首先要执行基类的非静态成员的初始化,此时p被初始化为47,并且打印出:Insect.p initialized;当执行初始化后,基类的构造器里的代码System.out.println("i = " + i + ", j = " + j)开始执行,所以打印出:i = 9, j = 0;此时j被初始化为39;

当基类的构造器的代码执行完后,首先要对Beetle类的非静态成员进行显示的初始化,此时K被初始化为47,并且打印出:Beetle.k initialized;等初始化完成后,Beetle构造器里的代码开始执行,所以打印出:K=47;J=39,o(∩_∩)o...哈哈程序的结构分析完了。
值得注意的是:静态成员初始化是从最顶层的类开始的,因为子类成员的初始化可能回用到基类的成员。

所以类加载以及初始化的顺序是:类的静态成员初始化分配内存(有父类的先父类,然后自己)->然后main方法执行->类初始化{类非静态成员的初始化,然后执行构造器(有父类的先给父类的非静态成员初始化,然后父类的构造器)}

【STM32项目】基于STM32设计的震动马达超声波电机高频震动——高级定时器PWM互补输出带死区控制__资料编号3 实现高级定时器互补输出带死区控制,实现震动/超声波电机/马达,高频震动。使用 STM32F103 芯片输出两路互补 PWM,并带有死区和刹车控制功能。定时器 1 通道 1 及其互补通道输出PWM,且带死区控。当定时器 1 的刹车输入引脚被拉高时,产生刹车时间,即定时器 8 停止输出 PWM。当刹车输入引脚被拉高时,通道 1 和通道 2 将从有波形输入状态转换成无效电平状态。 阅读详情

相关推荐

ResNet理论基础与具体实现(详细教程)

论文地址:Deep Residual Learning for Image Recognition ​ Identity Mappings in Deep Residual Networks pytroch源码地址:resnet 0x00 前言 ResNet是2015年就提出的网络结构,中文名字叫作深度残差网络,主要作用是图像分类。现在在图像分割、目标检测等领域都有很...

coordinate的博客 8329

Java类加载机制(初始化顺序)

之前写过一篇关于Java中普通代码块和static代码块的区别,大致讲解了普通代码块和Static代码的区别,但是并没有讲它们的加载执行顺序,本章就细细的将一下类的加载机制(初始化顺序)。 类生命周期 类的字节码从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resoluti

feigeswjtu的专栏 2506

STM32F103C8T6通过ESP8266连接阿里云物联网平台(附代码)

STM32F103C8T6连接阿里云物联网平台(1)—阿里云lot Studio控制 Web开发 分享一下自己使用stm32f103c8t6通过ESP_01模块连接阿里云物联网平台,实现温湿度上传和控制命令下达的过程,能力有限,用的是最简单的方法,如有错误,多多担待。 一、硬件选型 1、 stm32f103c8t6 2、ESP_01 wifi模块 3、其他 二、硬件连接 WSP_01 STM32F103C8T6 RXD PA2 TXD PA3 RES PA4 VCC 3.3

weixin_A13253323604 3万+

Java中类及方法的加载顺序

1. 虚拟机在首次加载Java类时,会对静态代码块、静态成员变量、静态方法进行一次初始化(静态间按顺序执行)。 2. 只有在调用new方法时才会创建类的实例。 3. 类实例创建过程:父子继承关系,先父类再子类。父类的静态->子类的静态->父类的初始化块->父类的构造方法->子类的初始化块->子类的构造方法 4. 类实例销毁时候:首先销毁子类部分,再销毁父类部分。 例: package e

hellorichen的专栏 1万+

CPG控制网络入门

从线性变换开始推导

妖米的博客 5044

QGIS插件实战:用百度地图AOI数据做个城市公园分析,从下载到出图全记录

本文详细介绍了如何利用QGIS的百度地图AOI插件进行城市公园分析,从插件安装、数据获取到空间分析与可视化全流程。通过实战案例演示了公园面积统计、服务范围缓冲区分析及专题地图制作,帮助用户高效完成城市绿地评估工作。

weixin_30790841的博客 556

Java中初始化问题

一、普通类(无继承)的初始化顺序:   java编程思想中,对一个对象的创建过程总结如下,假设有一个名为Dog的类:   1.即使没有显示的使用static关键字,构造器实际上也是静态方法。因此当首次创建一个类型为Dog的对象时,或者Dog类的静态方法或静态域首次被访问时,Java解释器必须查找类路径,以定位Dog.class文件。   2.然后载入Dog.class(这将创建一个Class...

weixin_30820151的博客 130

人工智能训练师三级补贴3120元申领全攻略|条件+流程+五省市对比

补贴是真的,但不是"白给"的。你需要满足社保、户籍、时间等条件,严格按照流程操作。记住四件事先确认自己是否满足条件,再报名——别考完了才发现领不到紧缺工种补贴更高——确认你所在城市是否在紧缺目录中证书下发后12个月内申请——设个日历提醒材料准备齐全再提交——避免来回折腾如果你正在考虑考人工智能训练师三级证书,想要从报名到备考到拿证到申领补贴的完整一站式指南,欢迎查看我的付费专栏:📖《人工智能训练师三级·从零到拿证完全指南》80篇系统化内容,覆盖报名、备考、冲刺、拿证全流程。

白话机器学习 1522

Java编程思想第7章习题答案(2)

14、 //Override 重写 @Override必须重写,否则会报错。 Overload重载 14、 package ch7; class Engine{ public void start() {} public void rev() { } public void stop() { } } class Wheel{ public void inflate(int psi) { } } class Window { public void rollup() { } p

returnadsss的博客 366

Vulkan入门系列0- Vulkan与OpenGL的区别

虽然Vulkan和OpenGL都是对GPU的抽象,都能达到相同的功能,但它们的设计理念不同,可以说设计差异是非常之大,由于OpenGL从1992年到现在,已经有30多年的历史,GPU功能日新月异,与当年不可同日而语,在OpenGL保持向下兼容情况下,还要在OpenGL基础上设计一套编程接口显然是不可能的,所以推出了新编程规范Vulkan。另外在一些无窗口的应用中,Vulkan可以有选择的不创建帧缓冲区,比如在数学运算,物理模拟,处理视频流的应用中并不需要窗口,所以Vulkan支持更灵活的应用场景。

GPU全栈博主 4069

【测开求职】面试题:计算机网络 详细版整理

本篇文章是笔者为准备研究生复试和校招而写,因此主要针对问答,注重理解,而不在于细节计算。读者可以先查看上面的链接走一遍计算机网络的整体框架结构。其中,重点难点以及易混淆的知识点,笔者会用其他文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。

vector的博客 5936

Java类的加载以及初始化顺序

首先是都知道的父子类的初始化顺序:父类静态属性>父类静态代码块>子类静态属性>子类静态代码块>父类非静态属性>父类非静态代码块>父类构造方法>子类非静态属性>子类非静态代码块>子类构造方法。 单个类的情况 但是如果在testClass中加上static testClass field = new testClass();...

卷福。的博客 335

SAPFiori Elements Analytical List Page 概述

ALP(Analytical List Page)是SAP Fiori提供的一种复合页面类型,结合了分析(图表/KPI)与事务(表格/操作)功能,适用于需要分析后立即执行处理的业务场景(如采购价格监控、销售逾期处理等)。其核心价值在于让用户在同一页面完成从数据洞察到事务处理的闭环,减少应用切换带来的效率损耗。 页面结构包含页头KPI标签、交互式图表和明细表格,通过联动过滤、选择同步等机制实现数据钻取与即时操作。支持标准过滤和可视化过滤,并依赖OData注解(SelectionVariant/Presenta

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 269

java类的加载,链接,初始化以及初始化的顺序。

介绍了类的加载过程,初始化的顺序,还有相对应的测试代码和运行结果

SSL 的博客 1833

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java加载 初始化顺序_java类的加载以及初始化顺序 .

类的加载和初始化的了解对于我们对编程的理解有很大帮助,最近在看类的记载方面的问题。从网上查阅了若干文章,现总结如下:我们通过一段代码来了解类加载和初始化的顺序:package com.classloader.demo;class Insect {private int i = 9;protected int j;Insect() {System.out.println("i = " + i + "...

weixin_36236141的博客 187

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深入java (类)初探类的加载和初始化顺序

上一篇博客深入理解了java中类的继承的作用和意义:复用和规范,我们也对重写父类的方法规范做出了解释:1.返回值和参数类型、参数个数和参数顺序必须一样;2.而且方法访问的权限一定要越来越大或者相等,因为如果你的父类方法是public,而子类的方法是private,程序在编译器可以通过,在执行期间突然变得不可读写和存取(多态机制),这显然是不合理的,同时编译器也不会允许你这样做。这是java的多态机制

yabay2208的博客 417

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java 理解类的加载机制 类加载顺序 类初始化过程 实例初始化过程

一、代码如下 1、创建一个Father类,包含实例变量、静态变量、静态代码块、构造方法、构造代码块、实例方法、静态方法 **@Description: 理解类的加载机制 * @version v1.0 * @author w * @date 2021年8月14日上午8:58:24 */ public class Father { // 实例变量 private int i = test(); // 静态变量 private static int x = metho...

HaHa_Sir的博客 2665

java加载 初始化顺序_java类的加载以及初始化顺序

1 classInsect {2 private int i = 9;3 protected intj;4 Insect() {5 System.out.println("i = " + i + ", j = " +j);6 j = 39;7 }8 private int p=print(" Insect.p initialized");9 private stat...

weixin_39637614的博客 80

Java Class类初始化加载顺序

了解class类初始化的顺序,便于实现相关应用的编码 测试类

进击的小白 518

Java 类中变量的初始化,类内部变量/代码块的加载顺序

Java 类中变量的初始化,类内部变量/代码块的加载顺序

Johnson's Blog 769

JAVA初始化类的加载顺序

zxaimai的博客 213

JAVA基础面试题:Java中的类初始化阶段与静态变量加载顺序的底层机制及其对程序行为的影响

本次面试围绕Java类初始化阶段和静态变量加载顺序展开了深入讨论,涵盖了底层机制、线程安全性、性能优化等多个维度。Victor的回答体现了扎实的技术功底和系统性思维,为面试官提供了全面的技术视角。

qq_61302385的博客 615

Java核心技术卷梳理补充-类中字段初始化与类的加载顺序问题

如果写一个类时没有编写构造器,就会为你提供一个无参数构造器。这个构造器将所有的实例字段设置为默认值。于是,实例字段中的数值型数据设置为0,布尔型数据设置为false,所有对象变量将设置为null。

m0_74220316的博客 493

类初始化顺序全解析:用装修房子模型讲明白Java类加载过程

准确预测代码执行路径避免NPE等初始化相关异常设计合理的类加载结构优化程序启动性能深入理解JVM类加载机制静父静子静先行,实例构造最后行代码顺序定乾坤,继承体系递归清静态只做一次事,实例每new都执行。

程序猿小白菜 884

Java 类的初始化 和 加载顺序

被这个这个问题困扰了好久,今天终于算是弄明白了。先上理论1、因为Java中所有的事物都是对象。每个类的编译代码都存在于他自己独立的文件中。该文件只有需要使用程序代码时,才会被加载.。类的加载发生于创建类的第一个对象时,但是当访问static域和static方法时也会发生加载2、构造器也是static方法。因此,更准确地讲类是在任何static成员被访问时加载的。接下来用两段代码讲解下:public...

潆溪的博客 238
上一篇: 修改Mysql的root密码及开启远程访问
下一篇: win7下安装centos7
xiaohan613
博客等级 码龄15年 2粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值