首页 > 编程语言 >Java中的代码块

Java中的代码块

时间:2023-02-25 17:13:56浏览次数:36  
标签:初始化 Java 代码 实例 println public out

Java中的代码块

我们在做笔试题的时候经常会遇到考察类中代码块运行顺序的题,所以我现在把它总结一下。

在Java中,代码块(Block)是用一对大括号括起来的一段代码,它可以包含多条语句。根据它的位置和修饰符,Java中的代码块可以分为以下几种:

  • 类初始化块(Static Initialization Blocks):用static关键字修饰,用于在类被加载时执行一些初始化操作,可以有多个类初始化块,按照它们在类中的位置依次执行。
public class MyClass {
    static {
        // 类初始化块
    }
}
  • 实例初始化块(Instance Initialization Blocks):不用任何修饰符修饰,用于在每个对象被创建时执行一些初始化操作,可以有多个实例初始化块,按照它们在类中的位置依次执行。
public class MyClass {
    {
        // 实例初始化块
    }
}
  • 局部代码块(Local Blocks):用于在方法中限定变量的作用域和生命周期,局部代码块内定义的变量只能在该块内访问,块执行完后变量会被销毁。
public void myMethod() {
    {
        int x = 1; // 局部代码块
    }
}
  • 同步代码块(Synchronized Blocks):用synchronized关键字修饰,用于实现线程同步,同一时刻只能有一个线程进入同步代码块执行。
public class MyClass {
    public synchronized void myMethod() {
        // 同步代码块
    }
}

代码块中的变量和语句可以访问和操作它们所属的作用域内的变量和对象,代码块的作用是提高代码的可读性和灵活性,使代码具有更细粒度的控制和处理能力。

下面我用代码对类初始化块和实例初始化块的运行顺序进行测试:

public class A {
    {
        System.out.println("A的实例初始化块");
    }
    static {
        System.out.println("A的类初始化块");
    }
    public A() {
        System.out.println("A的构造方法");
    }
}
public class B extends A{
    static {
        System.out.println("B的类初始化块");
    }
    {
        System.out.println("B的实例初始化块");
    }

    public B() {
        System.out.println("B的构造方法");
    }

    public static void main(String[] args) {
        new B();
    }
}

输出: ①A的类初始化块
②B的类初始化块
③A的实例初始化块
④A的构造方法
⑤B的实例初始化块
⑥B的构造方法
解释:类初始化块会在类被加载时执行,所以12先执行。实例初始化块在类被实例化时执行,并且先于构造方法执行。

标签:初始化,Java,代码,实例,println,public,out
From: https://www.cnblogs.com/classicltl/p/17154787.html

相关文章

  • 关于低代码和无代码---喧嚣背后的致命问题
    前言2021年的时候,刮起了一阵”低代码”和”无代码”的风,结果猪没见吹起来,风却早早停了。在我的职业生涯中遇到了很多的低代码的构想和实现,通常他们的想法非常朴素:写代码......
  • java security 详解_Spring Security入门教程
    SpringSecurity的简单使用简介SSM整合Security是比较麻烦的,虽然Security的功能比Shiro强大,相反却没有Shiro的使用量多SpringBoot出现后简化了Spring系列的配置......
  • java HashMap
    publicstaticvoidmain(String[]args){Map<Integer,String>m=newHashMap<>();//增m.put(1,"111");m.put(2,"2......
  • JavaWeb-动力节点
    目录......
  • 2023.8 Java与Python
    Java与Python都一直在各种流行编程语言中名列前茅,也有很多相似之处。作为技术人员,我们不能把自己局限在某一项技术或编程语言中,而应该能针对具体场景快速选择适合的技术解......
  • javascript
    JavaScriptjs嵌入001-方式一<!doctypehtml><html> <head> <title>HTML中嵌入JS代码的第一种方式</title> </head> <body> <!-- 1、要实现的功能: ......
  • web前端开发第202页习题3代码
    排序参考1<!DOCTYPEhtml>2<htmllang="en">34<head>5<metacharset="UTF-8">6<metahttp-equiv="X-UA-Compatible"content="IE=edge">7......
  • Java内存区域与内存溢出异常
    一、Java内存区域1、运行时数据区JDK1.8之前JDK1.8之后2、程序计数器一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器由于Java虚拟机的多线程......
  • java Vector
    publicstaticvoidmain(String[]args){Vectorv=newVector();//增v.addElement(111);v.addElement(222);v.addElem......
  • java——spring boot集成RabbitMQ——spring boot实现路由模式——消费者
    pom文件:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc......