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

yizhihongxing

下面给您详细讲解“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日

相关文章

  • Mybatis中的resultType和resultMap查询操作实例详解

    “Mybatis中的resultType和resultMap查询操作实例详解”是关于Mybatis中两种结果映射方式的详细介绍。在Mybatis中,我们可以通过resultType和resultMap两种方式来实现查询操作。这两种方式的本质区别是:resultType是直接将查询结果映射为实体类对象,而resultMap是通过自定义映射规则将查询结果映射为实…

    Java 2023年5月19日
    00
  • SpringBoot打成war包在tomcat或wildfly下运行的方法

    下面是讲解 Spring Boot 打成 WAR 包以及在 Tomcat 或 Wildfly 上运行的详细攻略: 1. Spring Boot 打成 WAR 包 Spring Boot 默认情况下是以嵌入式 Tomcat 启动的,如果我们希望将 Spring Boot 应用部署到外部 Tomcat 或 Wildfly 中,我们可以将其打包成 WAR 包。 1…

    Java 2023年5月19日
    00
  • Struts2之Validator验证框架的详细介绍

    Struts2之Validator验证框架详细介绍 Validator是Struts2的核心验证框架之一,它通过在Action中添加验证规则来确认表单数据的有效性。Validator提供了大量的验证方法,比如检查字符串长度、格式、是否为空等等。 常用验证方法 Validator提供了许多常用的验证方法,常用的方法如下: required:检查字段必填 str…

    Java 2023年5月20日
    00
  • MyBatis的mapper.xml文件中入参和返回值的实现

    MyBatis是一个数据持久层框架,mapper.xml文件是其中非常重要的一部分,它是用来描述SQL语句和映射关系的,同时也定义了SQL语句的入参和返回值类型。本攻略将详细讲解MyBatis的mapper.xml文件中入参和返回值的实现。 入参 在mapper.xml文件中,可以使用#{}语法来引用SQL语句的参数。在#{}中定义的是参数的名称,这些参数值…

    Java 2023年5月20日
    00
  • JDBC下Idea添加mysql-jar包的详细过程

    JDBC是Java语言操作关系型数据库的标准API,目前已经成为了Java中最流行的访问数据库的方式之一,因此在开发Java应用程序时,经常需要使用JDBC操作数据库。 而在使用Idea开发Java应用程序时,需要添加mysql-jar包才能够操作MySQL数据库。以下是JDBC下Idea添加mysql-jar包的详细过程: 下载mysql-jar包 首先,…

    Java 2023年6月16日
    00
  • 基于Bootstrap的Java开发问题汇总(Spring MVC)

    基于Bootstrap的Java开发问题汇总(Spring MVC)攻略 什么是Bootstrap? Bootstrap是Twitter推出的一个免费开源前端框架,是一个快速开发Web应用程序的工具。它包括HTML、CSS和JavaScript组件,例如表单、按钮、导航和其他界面元素等。 Bootstrap的优点: 简化开发流程,减少重复代码。 响应式设计,…

    Java 2023年5月19日
    00
  • springboot集成springsecurity 使用OAUTH2做权限管理的教程

    Spring Boot是一个非常流行的Java开发框架,它可以帮助开发者快速构建Web应用程序。Spring Security是一个强大的安全框架,它可以帮助开发者实现身份验证、授权和安全管理。OAuth2是一种流行的授权协议,它可以帮助开发者实现安全的API访问和授权管理。以下是Spring Boot集成Spring Security使用OAuth2做权限…

    Java 2023年5月15日
    00
  • mybatis项目CRUD步骤实例详解

    首先,使用MyBatis进行CRUD操作需要进行以下步骤: 定义数据库表结构,并在MyBatis中创建对应的实体类。 配置MyBatis的XML映射文件,将实体类映射到数据库中的表结构。 创建MyBatis的SqlSessionFactory对象。 使用SqlSessionFactory对象创建SqlSession对象。 使用SqlSession对象进行CR…

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