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

yizhihongxing

当在Java类中定义一个方法或者属性时,这些元素都会被封装在类体中。除了普通属性和方法,Java中还有一些特殊的代码块,包括静态代码块、构造代码块、构造函数和普通代码块。本文将介绍这些代码块的区别。

静态代码块

静态代码块的作用是在类的加载和初始化阶段执行,只会被执行一次。通常用于进行一些预处理操作,如加载驱动,数据库连接等。静态代码块使用static关键字修饰,一般位于类的顶部。

public class Demo {
    static{
        // 静态代码块
    }
}

构造代码块

构造代码块位于类中所有构造函数之前,用于在创建对象时统一进行成员变量的初始化操作。每次创建对象时都会执行构造代码块,并且在构造函数之前执行。构造代码块使用花括号包围。

public class Demo{
    {
        // 构造代码块
    }
    ...
}

构造函数

构造函数在Java中是一种特殊的方法,主要用于对象的初始化,包含了创建对象时必要的各种操作。它具有与类同名的名称,没有返回类型,并且可以有多个参数。构造函数和构造代码块一起,可以为对象属性赋初值。

public class Demo{
    public Demo(){
        // 构造函数
    }
    ...
}

普通代码块

普通代码块也称为局部代码块,作用域限定在代码块内部。通常用于在一个方法中执行当前方法所需的部分逻辑。普通代码块使用花括号包围。

public class Demo{
    public void print(){
        {
            // 普通代码块
        }
        ...
    }
}

通过上面的介绍,我们可以得出以下两个例子来进一步说明上述的四种代码块的执行顺序和作用:

public class Demo{
    static{
        System.out.println("静态代码块");
    }
    {
        System.out.println("构造代码块");
    }
    public Demo(){
        System.out.println("构造函数");
    }
    public void print(){
        {
            System.out.println("普通代码块1");
        }
        {
            System.out.println("普通代码块2");
        }
    }

    public static void main(String[] args){
        Demo demo = new Demo();
        demo.print();
    }
}

执行结果如下:

静态代码块
构造代码块
构造函数
普通代码块1
普通代码块2

从上述结果可以看出,在创建对象时,首先执行静态代码块,然后执行构造代码块,最后执行构造函数。普通代码块的执行顺序则根据代码块定义的顺序执行。

另一个例子:

public class Demo{
​    static String str;
​    {
​        System.out.println("构造代码块执行前str=" + str);
​        str = "构造代码块赋值";
​        System.out.println("构造代码块执行后str=" + str);
​    }
​    public Demo(){
​        System.out.println("构造函数执行前str=" + str);
​        str = "构造函数赋值";
​        System.out.println("构造函数执行后str=" + str);
​    }
​    public void print(){
​        {
​            System.out.println("普通代码块前str=" + str);
​            str = "普通代码块赋值1";
​            System.out.println("普通代码块后str=" + str);
​        }
​        {
​            System.out.println("普通代码块前str=" + str);
​            str = "普通代码块赋值2";
​            System.out.println("普通代码块后str=" + str);
​        }
​    }

​    public static void main(String[] args){
​        Demo demo = new Demo();
​        demo.print();
​    }
}

执行结果如下:

构造代码块执行前str=null
构造代码块执行后str=构造代码块赋值
构造函数执行前str=构造代码块赋值
构造函数执行后str=构造函数赋值
普通代码块前str=构造函数赋值
普通代码块后str=普通代码块赋值1
普通代码块前str=普通代码块赋值1
普通代码块后str=普通代码块赋值2

从结果可以看出,当对象创建时,以static关键字修饰的静态变量会首先被初始化为默认值(null0等),然后执行静态代码块,变量值被赋值为代码块的赋值值。接着,执行构造代码块块和构造函数,变量值被更新为上述两个代码块的赋值值,但是顺序是根据代码书写顺序执行的。最后,执行普通代码块,变量值也被更新为这两个普通代码块的赋值值,但是顺序同样也是根据代码书写顺序执行的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中静态代码块、构造代码块、构造函数和普通代码块的区别 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • PHP常用函数之获取汉字首字母功能示例

    当然!下面是关于\”PHP常用函数之获取汉字首字母功能示例\”的完整攻略: PHP常用函数之获取汉字首字母功能示例 在PHP中,我们可以使用一些常用函数来获取汉字的首字母。下面是一些关于获取汉字首字母的详细步骤和示例说明: 步骤1:使用mb_substr函数获取汉字首字母 PHP提供了mb_substr函数来获取字符串的子串。我们可以使用该函数获取汉字的首字…

    other 2023年8月19日
    00
  • java string类的常用方法详细介绍

    Java String类的常用方法详细介绍 Java中的String类是一个非常常用的类,它提供了许多方法来处理字符串。在本攻略中,我们将详细介绍String类的常用方法,并提供一些示例说明。 1. 字符串长度 length() length()方法用于获取字符串的长度,即字符串中字符的个数。 示例: String str = \"Hello, W…

    other 2023年8月6日
    00
  • 解决stackoverflow打开慢 实现快速访问

    以下是关于“解决stackoverflow打开慢实现快速访问”的完整攻略,包含两个示例。 解决Stack Overflow打开慢实现快速访问 Stack Overflow是程序员们常用的问答社区,但有时会出现打开慢的情况。以下是关于如何解决Stack Overflow打开慢的详细攻略。 1. 使用CDN CDN(内容分发网络)可以加速Stack Overfl…

    other 2023年5月9日
    00
  • android自定义view制作圆形进度条效果

    下面我将为你详细讲解Android自定义View制作圆形进度条效果的完整攻略。 一、前置知识 在学习制作圆形进度条之前,我们需要掌握以下一些知识: Android自定义View的基本原理 画笔(Paint)的使用 Canvas的使用 如果你对这些知识还不是很熟悉,可以查看相关的资料和学习。 二、绘制圆形进度条的原理 实现圆形进度条的关键在于理解角度的概念,以…

    other 2023年6月25日
    00
  • entityframework4.0(六)ef4的增加、删除、更改

    以下是关于“Entity Framework 4.0(六)EF4的增加、删除、更改”的完整攻略,包括EF4的基本知识、增加、删除更改的方法和两个示例。 EF4的基本知识 Entity Framework 4.0(EF4)是微软公司推出的一种ORM(对象关系映射)架,它可以将数据库中的表映射到.NET中的实体类,使得开发人员可以使用面向对象的方式来操作数据库。…

    other 2023年5月7日
    00
  • 一步一步跟我学易语言之关于变量

    一步一步跟我学易语言之关于变量 在易语言中,变量是存储数据的容器。它们可以存储各种类型的数据,如整数、浮点数、字符串等。本攻略将详细介绍如何在易语言中使用变量。 1. 变量的声明和初始化 在使用变量之前,我们需要先声明它们。变量的声明告诉编译器我们要使用一个特定类型的变量,并为它分配内存空间。变量的初始化是给变量赋予一个初始值。 下面是一个声明和初始化整数类…

    other 2023年8月8日
    00
  • 苹果推送最新系统macOS Catalina 10.15.6开发者预览版Beta 2

    苹果推送最新系统macOS Catalina 10.15.6开发者预览版Beta 2攻略 介绍 苹果公司最近发布了最新的macOS Catalina 10.15.6开发者预览版Beta 2,这是该系统的更新版本。这个版本包括许多新的功能和改进,使得用户在使用Mac系统时更加方便快捷。本文将详细介绍如何下载和安装最新版本的macOS Catalina 10.1…

    other 2023年6月26日
    00
  • 打印机只打印半截怎么办 打印机打印不全的解决办法

    打印机只打印半截怎么办 当打印机只能打印出纸张的一半,或者有一部分缺失时,我们可以采用以下几种方法来解决。 1. 清洁打印头 打印头可能会有堵塞或者杂物导致印刷不完整。可以尝试清洁打印头来解决问题。 步骤: 打印机应该处于关闭状态。取下打印头,并用软布轻轻地擦拭打印头清洁刀片。千万不要用手指直接触摸打印头。 拆卸打印头,将其放置于纯净水中慢慢地浸泡10分钟,…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部