java类运行以及static块的执行顺序

Java面试知识点(四)初始化执行代码顺序(包含static块和构造块)以及类方法和实例方法 (1)在初次 new 一个 Child 类对象时,发现其有父类,则先加载 Parent 类,再加载 Child 类。 (2)加载 Parent 类: 初始化 Parent 类的 static 属性,赋默认值; 执行 Parent 类的 static 初始化块; (3)加载 Child 类: 初始化 Child 类的 static 属性,赋默认值; 执行 Child 类的 static 初始化块; ... 阅读详情
一、java类的static块什么时候执行
如果了解JVM原理,我们可以知道,一个类的运行分为以下步骤:
1、装载;2、链接;3、初始化;4、初始化;5,实例化(创建新的实例)
实际上,static块的执行发生在“初始化”的阶段。初始化阶段,jvm主要完成对静态变量的初始化,静态块执行等工作。
下面我们看看执行static块的几种情况:
1、第一次new A()的过程会打印"";因为这个过程包括了初始化
2、第一次Class.forName("A")的过程会打印"";因为这个过程相当于Class.forName("A",true,this.getClass().getClassLoader());
3、第一次Class.forName("A",false,this.getClass().getClassLoader())的过程则不会打印""。因为false指明了装载类的过程中,不进行初始化。不初始化则不会执行static块。
二、java类中static的执行顺序
方法被定义为static就表示这个方法不需要声明类的实例即可执行;比如main方法。而某个类成员被定义为static的时候,它就几乎完全独立于这个类了。 
根据think   in   java2   还有java参考大全中所述,static方法在类刚刚被加载的时候就执行了。 
因此,可以说,static方法是在对程序进行解释的时候执行。 
比如 
class   UseStatic{ 
        static   int   a   =   3; 
        static   int   b; 


        static   void   meth(int   x) 
        { 
                System.out.println( "x   =   "   +   x); 
                System.out.println( "a   =   "   +   a); 
                System.out.println( "b   =   "   +   b); 
                
        } 
static {
    System.out.println("b = "+b);
    }
        static   { 
                System.out.println( "Static   block   initialized. "); 
                b   =   a*4; 
        } 
        public   static   void   main(String[]   args) 
        { 
                meth(42); 
        } 
} 
一旦UseStatic被装载,所有的static语句被执行。首先,a被设置为3,接着System.out.println("b = "+b);打印出 b=0;注意,可以有多个static代码块,按照顺序执行,同时b被默认初始化为0,接着static块执行(打印一条消息),最后,b初始化为a*4或12。然后调用main(),main()调用meth(),把42传递给x。3 个println()语句引用两个static变量a和b,以及局部变量x。

三、extends 和 static 的执行顺序研究

public class A {
public static final String CONSTANT = "1";
static{
System.out.println("a");
}
public A(){
System.out.println("b");
}
}

public class B extends A{
static{
System.out.println("c");
}
public B(){
System.out.println("d");
}
}


public class Test {

public static void main(String[] args){
System.out.println(A.CONSTANT);
A ab = new B();
ab = new B();
}
}
但是注意执行下边的代码就不会执行static块
System.out.println(A.CONSTANT);
因为这个是类的静态常量,在调用类的静态常量的时候不会导致类被加载(这个是我根据结果推断出来的,网上查了查也没有相关的解释,也许是jvm的规定吧)
1
a
c
b
d
b
d
在ab = new B(); 一句的时候会打印
b
d
这说明在实例化子类的时候,父类同时也会实例化。
这可是全网网工数通方向学习路线最完整,最详细的版本,没有之一 文章篇幅较长,耐心看完你一定有所收获。 阅读详情

相关推荐

立创开源桌面激光雕刻机DIY全解析:从悬臂结构、Arduino主控到Marlin固件

本文详细解析了基于立创开源平台的桌面激光雕刻机DIY全过程。重点介绍了悬臂式机械结构的设计与优化,阐述了采用Arduino Mega 2560主控与RAMPS 1.4扩展板的经典控制方案,并深入讲解了Marlin固件的关键配置步骤,包括电机步数计算与激光功能启用,为创客和电子爱好者提供了一套完整的从硬件搭建到软件调试的实战指南。

weixin_42510201的博客 387

static代码块在什么时候执行

一、误区:简单认为JAVA静态代码块在类被加载时就会自动执行。证错如下: class MyClass1 { static {//静态块 System.out.println("static block "); } } public class Main { Class[] classArray = { MyClas...

道德菩提 1万+

PLC期末速成——顺序功能图转梯形图

一、根据顺序功能图写出梯形图程序 顺序功能图: 梯形图: 1、程序段1,系统运行标志M0.0的启-保-停控制电路。 2、程序段2,PLC上电与逆行,初始化脉冲M1.0激活初始化步M2.0。 3、程序段3,当M2.0初始化步为活动步,并且M0.0系统运行标志位为1时,置位M2.1步,复位M2.0步。 4、当M2.1为活动步,并且I0.3中液位传感器为1时,置位M2.2步,复位M2.1步。 5、程序段5,当M2.2为活动步,并且I0.2高液位传感器为1时,置位M2.3步,复位M2.2步。 6、程序段

qq_52251819的博客 1万+

static块和构造函数的加载顺序

class A { static { System.out.print("1"); } public A() { System.out.print("2"); } } class B extends A{ static { System.out.print("a"); } public B() { System.out.print("b"); } } public c.

ITupup的博客 390

智能车竞赛循迹控制:基于状态机的直道、弯道、十字路口处理策略

在嵌入式系统与自动控制领域,PID控制算法是实现精确运动控制的基础。其原理是通过比例、积分、微分三个环节的线性组合,对系统误差进行实时校正,从而实现对目标值的快速、稳定跟踪。这项技术的核心价值在于为各类自动控制系统提供了稳定、可靠且易于实现的解决方案,广泛应用于机器人、无人机、工业自动化等场景。在智能车循迹这类特定应用中,赛道环境复杂多变,单一的PID控制器难以应对直道、弯道、十字路口等不同赛道元素的控制需求。此时,有限状态机(FSM)作为一种高效的**决策框架**,能够根据实时感知的赛道特征(如边线曲率、

weixin_34034261的博客 283

ThingsBoard - 设备接入

设备接入笔记

qq_53839898的博客 1456

java中关于static与普通代码块在各类中的执行顺序

今天学到了代码块相关的知识,感觉内容挺多的。 首先总结一下执行顺序就是: 父静->子静->父普->父构->子普->子构 由以下代码作为示例: public class Main() { public static void main() { B b = new B(); } } class A{ public static int num1; static { num1 = 100; .

m0_54656561的博客 912

Python实现商品价格监控与波动分析爬虫项目

本文通过完整的代码示例和详细的技术讲解,展示了如何实现商品价格的自动监控和波动分析。该项目不仅适用于个人购物助手,还可以扩展为商家的竞品监控工具。通过结合数据抓取、存储、分析与可视化,能够帮助我们更好地理解市场趋势并做出优化决策。

2201_76125261的博客 1743

static的详解与代码的执行顺序

static修饰符是笔试考察重点,奈何我没认真学,栽了很多跟头后,做个笔记记下了。 在学习之前得知道它在内存中是怎么实现的 前置知识:什么是压栈,压栈就是入栈和出栈的统称,将方法的局部变量等数据放入栈中,称为入栈,出栈则是数据被清出栈。 static可修饰谁? 修饰方法 修饰全局变量 注:只能修饰全局变量,不管方法是否被static修饰,都不能修饰方法中的局部变量 static的作用 修饰方法 调用:方法类级别的,可以通过通过”类名“.方法名调用,也可以通过对象调用,普通的变量都是只能通过对象调用

ha_ni_ha_ni的博客 1635

KEPServerEX物联网网关(IoT Gateway)REST客户端代理(非原创)

(中文版)资料来源于【OPC-KEPServerEX学习KEPWare交流】905485143群的【455196383】【零下一度】 一。KEPServerEX物联网网关REST客户端代理演示 在KSE中,首先构建一个带有通道/设备/标签的模拟器系统。 例如,下面是三个随机项目。 直接到IoT网关插件,添加新代理。 从类型列表中选择REST Client。 终结点...

-雲飛兄-博客 5809

MuJoCo 入门教程(二)

本章介绍 MuJoCo 的数学和算法基础。对于熟悉广义或关节坐标建模和仿真的读者来说,整体框架是相当标准的。因此,我们将对这些材料进行简要总结。本章的大部分篇幅用于介绍我们如何处理接触和其他约束条件。这种方法是基于我们最近的研究,也是 MuJoCo 所独有的,因此我们花时间对其进行了详细的激励和解释。更多信息可参见下面的论文,尽管本章中的一些技术思想是新的,在其他地方还没有描述过。

机器人控制与仿真应用 3713

java static什么时候执行_月光软件站 - 编程文档 - Java - static方法是什么时候执行...

先说一下static方法的特点吧。方法被定义为static就表示这个方法不需要声明类的实例即可执行;比如main方法。而某个类成员被定义为static的时候,它就几乎完全独立于这个类了。根据think in java2 还有java参考大全中所述,static方法在类刚刚被加载的时候就执行了。因此,可以说,static方法是在对程序进行解释的时候执行。比如(引自java参考大全)class Use...

weixin_42554394的博客 786

Arduino与Proteus仿真实例-LCD2004-I2C(PCF8574)驱动仿真

LCD2004-I2C(PCF8574)驱动仿真 PCF8574/74A 通过两线双向 I2C 总线(串行时钟 (SCL)、串行数据 (SDA))提供通用远程 I/O 扩展。 LCD2004,即2004字符型液晶显示器,是一种点阵模块,用于显示字母、数字、字符等。 它由 5x8 个点阵位置组成; 每个位置可以显示一个字符。 两个字符之间有一个点间距,行之间有一个空格,从而将字符和行分开。 模型 2004 表示它显示 4 行,每行 20 个字符。 在前面的实例中对PCF8574和LCD2004的已经做了详细介

视觉与物联智能 1165

Java中static块

Java 程序中时常用些 static {} 这样的结构。  这样的结构叫 static块 ,一般是一个类初始化时运行的代码。 注意,是类的初始化,不是对象的初始化。  也就是你在定义对象是,它运行的初始化代码,并且只有第一次定义时才运行。之后就不再运行初始化了。  一个类中可以可以有很多static块。static块按顺序执行。 看以下代码: public class Test

500

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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

J2SE --- static块

Java中static块 Java 程序中时常用些 static {} 这样的结构。 这样的结构叫 static块 ,一般是一个类初始化时运行的代码。 注意,是类的初始化,不是对象的初始化。 也就是你在定义对象时,它运行的初始化代码,并且只有第一次定义时才运行。之后就不再运行初始化了。 一个类中可以可以有很多static块。static块按顺序

rainbow20的专栏 189

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Jvm加载顺序

爱的色放a asdf s

sinat_34620530的博客 291

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java里面的静态代码块

问题:Java里面的静态代码块 I was looking over some code the other day and I came across: 前几天我在看一些代码时发现: static { ... } 我是c++转来的,我不知道为啥要这样干。这个代码也编译成功了,没出错误。这里的"static"代码块是啥啊? 回答一 它是一个静态初始化器。它在类被加载时执行(准确地说应该是初始化,但你通常不会注意到其中的区别)。 它也可以被看成是一个“类的构造函数”。 请注意,还有一些实例初始化器,

weixin_44560620的博客 141

java小程序查看_从一个java小程序看java的初始化流程

简介java的构造函数执行顺序深究codepackage test1;import java.util.*;public class ConstructorTest {public static void main(String[] args){Employee[] staff = new Employee[3];staff[0] = new Employee("Harry", 40000);st...

weixin_33235712的博客 91

Static静态代码块以及各代码块之间的执行顺序

前言 在Java中,Static静态代码块、构造代码块、普通代码块、构造函数的执行顺序是一个java学习者必须掌握的基础,本篇博客旨在让大家能清除了解它们之间的执行顺序。 文章目录代码块的分类1、静态代码块(也叫静态块、静态初始化块)2、构造代码块(也叫构造初始化块)3、代码块(又叫普通代码块、初始化块)执行顺序的代码测试继承中各代码块的执行顺序 代码块的分类 基本上代码块分为三种:Static静...

宜春 2万+

static 块以及代码块执行顺序

static块,普通代码块,构造代码块执行顺序

冬青的专栏 6582

一篇文章搞懂java中类以及static关键字执行顺序

详细分析了java中的static关键字结合类的执行顺序

m0_61820867的博客 1021

java 类执行顺序

类中代码的执行顺序: 加载时:static 块会执行一次,且以后不会再执行 {}代码块、实例化属性字段 : 相同执行级别,按照代码顺序执行 构造函数 如果有父类,先按照上面顺序执行父类的代码 package com.accdays.keyword; /** * 类中代码的执行顺序: * 1. 加载时:static 块会执行一次,且以后不会再执行 * 2. {}代...

dongxiexie的博客 296

static执行顺序

本文主要介绍以下两块内容的执行顺序,熟悉的大虾可以直接飘过。      一。JAVA中执行顺序 静态块块构造器父类构造器     二。JAVA中赋值顺序       静态块直接赋值      块直接赋值      父类继承的属性已赋值      静态变量声明时赋值      成员变量声明时赋值      构造器赋值    第一部分很好测试,我

人生最遗憾的莫过于:轻易地放弃了不该放弃的,固执地坚持了不该坚持的 1851

Java和Android中,代码块、static静态代码块的执行顺序

Java和Android中,代码块、static静态代码块的执行顺序有没有什么区别呢。

马克宅只是个码农 5173

java中static的执行顺序

例一: 这个是static执行顺序的标准例子,看懂这个再研究例二,不然容易蒙,哈哈哈哈。 public class StaticSequence { //private static StaticSequence t = new StaticSequence(); public static String a = "qwe"; public int d = 666;...

HD243608836的博客 1292

java static块的执行时机

总的来说,`static`块的主要作用是在类加载时执行静态初始化操作,例如初始化静态变量、加载静态资源等。2. **加载顺序**:在类加载时,`static`块会按照它们在类中出现的顺序依次执行。在Java中,`static`块是用来初始化类的静态变量或执行静态操作的代码块。4. **优先级高于实例初始化块**:`static`块的执行优先级高于实例初始化块。即`static`块先于实例初始化块执行。3. **只执行一次**:`static`块只会在类加载时执行一次,无论这个类被实例化多少次。

weixin_37841024的博客 742
上一篇: 存储过程优缺点及使用原则
下一篇: sql优化策略
技术宝哥
博客等级 码龄16年 331粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值