【Java笔记】静态代码块和构造代码块详解

java静态代码块,构造方法,构造代码块的执行先后顺序 1、执行顺序 静态代码块>构造代码块>构造方法 原因: 静态代码块(static{})在类加载的时候执行一次,是最早被执行的。 构造代码块({}内的部分)在每一次创建对象时执行,始终在构造方法前执行。 构造方法在新建对象时调用( 就是new的时候 )。 注意: 静态代码块在类加载的时候就执行,所以它的优先级高于入口main()方法。 当三种形式不止一次出现,同优先级是按照先后顺序执行。 程序代码示例: public class StaticTest { public stati 阅读详情

    学过Java的朋友,应该会有人没听说话“静态代码块”和“构造代码块”的吧?笔者在第一次学习Java的时候也没听说过这一部分的内容。当然如果有知道的大神,就可以略过了。不管你对Java了解多少,我还是从头开始讲起吧。

    还记得笔者的一篇讲解构造器的文章么?如果不知道,请找到这篇文章把他看完。其实在实例化对象的时候,构造器并不是首先被执行的。那在执行构造器之间究竟还有什么被执行了?那就是我要介绍的静态代码块和构造代码块。

    “块”这个概念大家都很清楚吧?不管在C/C++或者Java都有这个概念。用大括号将一系列代码阔起来,就成了一个块。

//这就是一个块,str具有块作用域,也是一个局部变量
{
    String str = new String("Hello, world!");
    System.out.println(str);
}
    上面的代码就是一个块。大家都知道在C中代码是基于函数的,即一切的代码都应该在函数中,具体执行的是函数,而不是某个单独的代码。即,你不能独立于函数之外去执行代码。下面的代码在编译的时候就会报错。

int main(int argc, char* argv[])
{
    return 0;
}
int a = 0;
a = 10 + 5;  //这样的做法是不对的

    只有这样编写,才合乎语法的要求:

int main(int argc, char* argv[])
{
    function();
    return 0;
}
int a = 0;
void function()
{
    a = 10 + 5;
}
    而在Java中,类才是代码的一个单元。即,代码都是由一个一个类组成的。在类中再遵循C/C++中的规则(代码放在函数中)。但不是所有的代码都遵循这一规则。那就是代码块。它可以独立于方法的。下面给一个例子来说明:

public class Lin {

    { //这是构造代码块
        System.out.println("This is normal block");
        t1 = new Test(1);
        t2 = new Test(2);
        t3 = new Test(3);
    }

    static  //这是静态代码块
    {
        System.out.println("This is static");
        t = new Test(0);
    }
    public static void main(String args[]) {

        System.out.println("main()");
        new Lin();
        new Lin();

    }
    public Lin() {
 
        System.out.println("Lin()");

    }
    public Test t1;
    public Test t2;
    public Test t3;
    public static Test t;

}
class Test {

    public int a = 0;
    Test() {
       <pre name="code" class="java">        System.out.println("Test");

}
Test(int a) {

this.a = a;
System.out.println("Test(" + a + ")");

}

}


    正如上面的代码所示,构造代码块就是一个普通的块。静态代码块是一个普通的块并且面前加了一个关键字“static”。先看一下程序的运行结果:

        This is static
        Test(0)
        main()
        This is normal block
        Test(1)
        Test(2)
        Test(3)
        Lin()
        This is normal block
        Test(1)
        Test(2)
        Test(3)
        Lin()

    很明显,最先运行的是静态代码块和构造代码块,最后运行的才是构造器。所以它俩就是在构造器运行之前所运行的代码。那他们到底是有什么作用呢?

    静态代码块是用来初始化静态域的,他只能初始化静态域! 而构造代码块是用来初始化对象的域。因为静态域是属于类的,因此实例化多少个对象,静态代码块只能运行一次。初始化完这一系列工作之后,才调用类的构造器,来执行客户端程序员所要初始化的域。这两种块是类的设计人员所做的工作。为了给客户端开发人员提供一个接口,让他们也能初始化域,构造器就是一个不二的选择。

    还有一个比较经典的细节就是,类的初始化顺序。读者应该看到这面代码的执行结果了吧?它的输出结果为什么是这个顺序的呢?这就涉及到类的初始化顺序,请看笔者相关的文章。

Java中构造方法,构造代码块和静态代码块执行顺序详解 Java中构造方法,构造代码块和静态代码块执行顺序详解 前言: 构造方法,构造代码块和静态代码块的执行顺序是一个常见的面试题,精通Java的人都知道执行顺序为:“静态代码块——>构造方法——>构造代码块”,接下来对该顺序进行详细分析 分析: 1.构造方法的执行: ​ 所有的Java类中至少都会有一个构造方法,用于对象的初始化。 2.构造代码块的执行: ​ 构造代码块是类中编写的一个代码块成员,它与构造方法不同,如下图所示: ​ 我们定义一个对象后执行代码,结果如下: ​ 从上图我们 阅读详情

相关推荐

【JavaEE基础与高级 第45章】Java中的构造代码块和静态代码块详解

代码块是类的成分之一(成员变量、构造器,方法,代码块,内部类) * 在 Java 类中,使用 {} 括起来的代码被称为代码块。

KJ.JK 1万+

Java中静态代码块、代码块以及构造函数执行顺序详解

在JavaSE的基础笔试题中经常会出现这三个的一个执行顺序,那么他们的执行顺序究竟是怎么样的呢?通过代码我们可以直接看一下最终结果(代码如下) public class testOne extends TestTwo{ public testOne(){ System.out.println("子类构造方法"); } { System.out...

知的IT成长之路 1万+

【电路设计实战】BUCK降压电路:从原理到PCB布局的降噪与效率优化

本文深入剖析了BUCK降压电路的工作原理,并针对其固有的开关噪声问题,提供了从核心元件选型到PCB布局的全面优化方案。文章重点探讨了电感、电容等关键元件的选型要点,强调了低ESR电容和肖特基二极管的重要性,并详细阐述了如何通过最小化功率回路、保护敏感信号线等PCB布局实战技巧,有效抑制噪声、提升效率与稳定性。

weixin_29304021的博客 221

Java中的静态代码块与代码块详解

1 构造代码块 构造代码块就是在类中用{}括起来的代码块,如下所示,普通代码块按照顺序从上到下依次执行。 public class Test{ { //这是构造代码块 } } 2 静态代码块 静态代码块就是使用static修饰的用{}括起来的代码段,如下所示,静态代码块用于给静态变量进行赋值, 且:静态代码块只在类加载时执行,而且静态代码块只能给静态变量赋值,不能给成员变量赋值。 static{ //这里是静态代码块, //静态代码块中的代码会优先于 } 静态代码块只在类加载时执行 pub

麦田里的守望者 993

SCCM部署教程:(3)SCCM安装

这两则摘要介绍了WSUS和SCCM的安装步骤: WSUS安装:通过服务器管理器添加"Windows服务器更新服务"角色,选择SQL数据库并指定安装路径,验证数据库连接后完成安装。 SCCM安装:先运行预检工具Prereqchk.exe,选择主站点安装类型,配置语言、站点代码和名称,设置SQL数据库连接参数(保留默认端口4022),选择通信方法和系统角色(管理点和分发点),最后完成约1小时的安装过程。 两则安装指南都强调要确保数据库配置与前期准备一致,并提供了关键配置选项的说明。

小V锅的专栏 913

MediaPipe实战:从零构建人脸关键点检测应用

本文详细介绍了如何使用Google的MediaPipe框架从零构建一个实时人脸关键点检测应用。文章深入剖析了MediaPipe的三段式检测流水线,提供了Android平台的完整实战教程,包括环境配置、模型加载、摄像头集成、关键点绘制以及性能调优指南,帮助开发者快速实现高效、跨平台的人脸AR特效与交互功能。

weixin_29100927的博客 341

Java中普通代码块,构造代码块,静态代码块区别及代码示例

//执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。 其中静态代码块只执行一次。构造代码块在每次创建对象是都会执行。 1 普通代码块 1 //普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行” 2 public class CodeBlock0...

weixin_30439031的博客 436

GIS应用技巧之三招搞定重叠区域数据提取

在很多分析过程中,常常需要分析判断哪些图形发生了重叠,该重叠情况的发生在对应分析环境下具有特定意义。例如在缓冲区分析中,若两个受灾点周边的受灾面积(即缓冲区)有所重叠,分析重叠区域的受灾影响时,就需要考虑相互影响的因素。本例中先用【要素转面】工具提取出发生重叠的区域,其次用【空间连接】工具将原始图层信息连接到重叠数据的图层,分析重叠数据的属性表,即可得到发生重叠的原始图层数据。 Step1 提取重叠区属数据。打开【数据管理工具】|【要素】|【要素转面】工具,输入要素设置为“circles”,输出要素类设置为

端木宛白的博客家园 6万+

Java普通代码块,构造代码块,静态代码块区别,执行顺序的代码实例

除了说普通代码块,静态代码块,构造代码块的执行顺序外,还有静态方法,静态变量等,都放在一起的话,这个执行顺序,怎么确定。 我就实际弄个代码,看下执行顺序。 public class Line { static { System.out.println("静态代码块执行:loading line"); } public static String s

请叫我大师兄 8608

vivado 编译ADI AD9361 TCL脚本生成hdl工程

(4)输入"source ../../scripts/adi_make.tcl"命令(仅双引号内部命令,不包含双引号),个人理解:该命令用来加载当前所需要编译工程所需要各功能模块的信息,因为每个工程需要不同的功能模块,比如有的需要gpio模块,有的不需要gpio模块,这些模块上前面路径的library也同样以TCL脚本形式存在,当有需要时才进行编译,怎么知道当前工程需要什么模块呢就是通过"source ../../scripts/adi_make.tcl"(仅双引号内部命令,不包含双引号)命令实现。

weixin_40586423的博客 808

STM32L051低功耗模式下LPUART的使用

STM32L0系列低功耗UART配置代码清单及注释,大家可参考学习使用。

嵌入式工程师 2104

Java中构造代码块和静态代码块

介绍构造代码块和静态代码块的格式和特性。末尾给出了一个静态代码块在数据库连接池应用的简单介绍。

m0_46672151的博客 1867

C#上位机+YOLO实时目标检测:摄像头采集+多线程推理+精度调优全流程

标注数据集:使用LabelImg工具标注目标对象,按YOLO格式整理数据集;模型训练:使用Ultralytics库训练自定义模型,提升特定目标的检测精度;训练参数优化:增加训练轮数(epochs=100200)、调整批次大小(batch=1632)、使用数据增强(flip、mosaic等)。摄像头采集:封装通用采集类,支持USB摄像头/网口相机,实现稳定帧读取与异常处理;多线程推理:采用“采集线程+推理线程+UI线程”解耦架构,使用线程安全队列传递帧数据,彻底解决界面卡顿;核心封装。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 673

【java】代码块详解,静态代码块与非静态代码块

如果成员变量想要初始化的值不是一个硬编码的常量值,而是需要通过复杂的计算或读取文件、或读取运行环境信息等方式才能获取的一些值,该怎么办呢?此时,可以考虑代码块(或初始化块)。一个类中代码块若有修饰符,则只能被static修饰,称为静态代码块(static block),没有使用static修饰的,为非静态代码块。

共同学习,共同成长 3290

【WorkBuddy专栏32】从「分文件夹」到「组队打仗」——WorkBuddy v5.0项目模式深度拆解

【WorkBuddy专栏32】从「分文件夹」到「组队打仗」——WorkBuddy v5.0项目模式深度拆解

AI人人懂 297

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java中静态代码块,非静态代码块,构造函数的执行顺序

静态代码块:是用来初始化类的信息,在类被加载的时候就会被执行,且只执行一次。执行优先级高于非静态的初始化块。 非静态代码块:是用来初始化类的实例信息,在创建对象的时候就会被执行,且每创建一个对象都会被执行一次。执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。 构造方法:是用来创建对象的。 执行顺序:静态代码块>非静态代码块>构造方法 即:程序在执行时,首先执行静态代码块,且只执行一次。接下来再创建对

m0_37671741的博客 2813

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Java基础】Java中静态代码块、构造代码块、构造函数、普通代码块

转载http://www.cnblogs.com/ysocean/p/8194428.html#_label0_0 内容大纲 一、静态代码块 ①、格式 在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块: public class CodeBlock { static{ System.out.println("静态代码块");...

明月沉江春雾晓 2394

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

静态代码块、构造代码块、构造函数、普通代码块的区别

在Java中,静态代码块、构造代码块、构造函数、普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序。

ThinkStu的博客 6219

静态代码块、构造代码块、构造函数以及Java类初始化顺序

静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行。执行顺序优先级:静态块,main(),构造块,构造方法。

omygodvv的博客 1190

Java中静态代码块、构造代码块、构造函数、普通代码块执行顺序

首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有构造代码块,如果有就执行父类的构造代码块,父类的构造代码块执行完毕,接着执行父类的构造方法;而一般的方法不存在这一特点;对于静态方法,在类加载的时候,静态方法也已经加载了,但是我们必须要通过类名或者对象名才能访问,也就是说相比于静态代码块,静态代码块是主动运行的,而静态方法是被动运行的。普通代码块和构造代码块的区别是,构造代码块是在类中定义的,而普通代码块是在方法体中定义的。

日常工作记录,解决实际问题,不成体系。 1069

Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序

(1)访问SubClass.main(),(这是一个static方法),于是装载器就会为你寻找已经编译的SubClass类的代码(也就是SubClass.class文件)。对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。11 System.out.println( "父类--静态初始化块" );35 System.out.println( "子类--静态初始化块" );

2501_92608043的博客 1065

Java中静态代码块、构造代码块、构造函数、普通代码块

  在Java中,静态代码块、构造代码块、构造函数、普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序。 回到顶部 1、静态代码块   ①、格式   在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块: 1 2 3 4 5 publicclassCodeBlock { static{ System.out.println(...

好奇心大爆炸 1711

静态代码块、构造代码块、构造方法的执行顺序

静态代码块是类级别的,而构造代码块和构造方法是实例级别的,因而静态代码块先执行;2.构造代码块:是独立的,必须依附载体才能运行,Java会把构造代码块放到每种构造方法的前面,用于实例化一些共有的实例变量,减少代码量。3、创建子类对象时,子类的静态代码块在父类的静态代码块后面执行,但优先于父类的构造代码块和构造方法;1、在创建一个对象的过程中,三者的执行顺序是:静态代码块 --> 构造代码块 --> 构造方法;1.静态代码块:是在类的加载过程的第三步初始化的时候进行的,主要目的是给类变量赋予初始值。

qq_52136981的博客 1793

Java笔记 —— 局部代码块,构造代码块,静态代码块

这篇博客是把之前上课时的笔记整理一下,加上我个人的理解和注释,还有一些例子发出来 局部代码块,构造代码块,静态代码块局部代码块构造代码块静态代码块 首先在Java中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同, 可以分为局部代码块,构造代码块,静态代码块 局部代码块 局部代码块: 在方法中出现; 作用:限定变量的生命周期,及早释放,提高内存利用率 在同一个类出现的时候,多个局部代码块的执行顺序是自上而下的。 public class Demo1 { public static

一纸春秋的博客 808

Java中静态代码块、实例代码块和构造方法执行顺序详解

在面试中问到 Java 中子类继承父类,在运行的过程中静态代码块、实例代码块、静态方法和构造方法执行顺序

m0_62985615的博客 1260
上一篇: 【Java笔记】类的构造器究竟做了什么?
下一篇: 【Java笔记】继承父类的方法只能操作父类的域
林帅帅
博客等级 码龄12年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值