java 面向对象代码块及不同位置对属性赋值的执行顺序

下面给您详细讲解“Java面向对象代码块及不同位置对属性赋值的执行顺序”的攻略。

1. 面向对象代码块

Java中的代码块可以分为普通代码块、构造代码块和静态代码块。其中静态代码块和构造代码块可称作面向对象代码块。下面是两个例子:

1.1 静态代码块

静态代码块在类初始化时执行,仅执行一次,适合于执行一次性的初始化操作。

public class Test {
    static {
        System.out.println("这是静态代码块!");
    }
    public static void main(String[] args) {
    }
}

在以上代码中,当我们执行main方法时,控制台会输出“这是静态代码块!”,因为在类加载的时候,静态代码块就已经执行了。

1.2 构造代码块

构造代码块在每次创建对象时执行,适合于对对象的属性进行初始化操作。

public class Test {
    {
        System.out.println("这是构造代码块");
    }
    public Test() {
        System.out.println("这是构造方法");
    }
    public static void main(String[] args) {
        new Test();
        new Test();
    }
}

在以上代码中,我们创建了两个Test的实例。每个实例初始化时,都会先执行构造代码块,再执行构造方法。输出结果如下:

这是构造代码块
这是构造方法
这是构造代码块
这是构造方法

2. 不同位置对属性赋值的执行顺序

对于一个类的属性,可以在变量定义处赋值,也可以在代码块或构造方法中进行赋值,同样对于静态属性也是这个原理。下面是两个例子:

2.1 属性赋值代码块、构造代码块、构造方法

public class Test {
    {
        System.out.println("这是构造代码块");
        num = 2;
    }
    int num = 1;
    public Test() {
        System.out.println("这是构造方法");
        System.out.println("num: " + num);
    }
    public static void main(String[] args) {
        new Test();
    }
}

在以上代码中,属性num在变量定义处赋值为1,然后在构造代码块中给num赋值为2,最后在构造方法中输出num的值。控制台的输出结果为:

这是构造代码块
这是构造方法
num: 2

可以看出,构造代码块中的赋值操作先于构造方法的执行,而变量定义处的赋值在所有代码块之前执行。

2.2 静态属性赋值代码块、静态代码块、变量定义处赋值

public class Test {
    static {
        System.out.println("这是静态代码块");
        staticNum = 2;
    }
    static int staticNum = 1;
    public static void main(String[] args) {
        System.out.println("staticNum: " + staticNum);
    }
}

在以上代码中,静态属性staticNum在变量定义处赋值为1,然后在静态代码块中给staticNum赋值为2,最后在main方法中输出staticNum的值。控制台的输出结果为:

这是静态代码块
staticNum: 2

可以看出,静态代码块中的赋值操作先于变量定义处的赋值,而静态代码块和变量定义处的操作都先于main方法的执行。

以上就是“Java面向对象代码块及不同位置对属性赋值的执行顺序”的攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 面向对象代码块及不同位置对属性赋值的执行顺序 - Python技术站

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

相关文章

  • Java中的程序计数器是什么

    Java中的程序计数器是一种内存区域,它可以记录程序当前执行的位置,以便执行下一条指令。程序计数器在Java虚拟机中扮演了非常重要的角色,它是Java多线程程序中的一种线程私有的内存空间,也是Java虚拟机规范中定义的六大内存区域之一。 程序计数器主要的作用有两个: 确保线程的恢复。程序计数器可以记录线程在执行Java字节码的过程中的位置,当线程因为时间片结…

    Java 2023年5月23日
    00
  • Java设计模式之java迭代器模式详解

    Java设计模式之Java迭代器模式详解 迭代器模式(Iterator Pattern)是很多程序员最常用的一种设计模式,它主要用来遍历集合(Collection)中的元素,让我们能够在不暴露集合底层实现的情况下,按照一定顺序访问集合中的元素。本文将详细讲解Java迭代器模式在设计中的应用,以及如何实现Java迭代器模式。 迭代器模式简介 迭代器模式是一种行…

    Java 2023年5月23日
    00
  • Java毕业设计实战之财务预算管理系统的实现

    Java毕业设计实战之财务预算管理系统的实现 1. 确定项目需求 在设计财务预算管理系统之前,我们需要先明确项目需求,对整个系统的功能、架构、流程等方面有一个清晰的认识。一般而言,一个财务预算管理系统应该包括以下几个方面的功能: 用户登录和权限管理 预算制定和管理功能 预算执行和监控功能 预算分析和报告功能 针对以上需求,我们可以进行一个详细的需求分析,并制…

    Java 2023年5月24日
    00
  • js 编码转换 gb2312 和 utf8 互转的2种方法

    下面是对“js 编码转换 gb2312 和 utf8 互转的2种方法”的完整攻略: JS 编码转换 GB2312 和 UTF-8 互转的 2 种方法 在 JavaScript 中,有时需要将字符串从 GB2312 编码转换为 UTF-8 编码或者将字符串从 UTF-8 编码转换为 GB2312 编码。下面介绍两种方法可以实现这个功能。 方法 1:使用 Tex…

    Java 2023年5月20日
    00
  • Shell编程之变量的高级用法详解

    Shell编程之变量的高级用法详解 在Shell编程中,变量是经常被使用到的概念。除了基础的变量赋值外,还有更多高级的用法。在本文中,我们将讲解一些高级的变量用法。 1. 变量的替换和引用 1.1 命令替换 通过使用$( )或者` `将命令包含在内,可以将命令的结果值替换成变量值。例如: DATE=$(date +%Y-%m-%d) echo "T…

    Java 2023年5月26日
    00
  • Java字符串中指定部分反转的三种方式

    以下是Java字符串中指定部分反转的三种方式的完整攻略,希望对您有所帮助。 方式一:使用StringBuffer反转指定部分字符串 通过Java自带的StringBuffer类可以方便地反转指定部分字符串。具体实现过程如下: 将原始字符串转换为StringBuffer对象,以便进行修改 使用StringBuffer的reverse()方法反转指定的子串 将修…

    Java 2023年5月27日
    00
  • bootstrap table支持高度百分比的实例代码

    请跟我一起来详细探讨一下 “Bootstrap Table 支持高度百分比的实例代码” 的完整攻略。 1. 准备工作 首先,我们需要在 html 文件中引入必要的 js 和 css 文件: <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/boot…

    Java 2023年5月23日
    00
  • JVM中对象的创建与OOP-Klass模型

    一、JVM中对象的创建 在Java中,对象的创建过程必须经过如下步骤: JVM读入指定类的二进制数据,并在方法区中生成类模板,同时为类变量和静态变量分配内存空间; JVM在堆上分配实际的对象空间,同时根据不同的访问控制权限设置对象的内部成员; 在对象空间中执行实例方法时,虚拟机通过对象的指针调用相应方法。 二、OOP-Klass模型 OOP-Klass模型是…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部