java static块和构造函数的实例详解

2023-12-11java编程
14

Java中的static块和构造函数都是用来初始化类的成员变量的,但两者有着不同的特点和应用场景。下面详细讲解static块和构造函数的用法及其区别。

一、static块

1.1 定义

在Java中,static块是一个静态代码块,用来初始化静态成员变量。在类加载时,如果类中有static块,则首先会执行static块,然后才会执行其他代码块和构造函数。

1.2 语法

格式如下:

static{
    // 初始化代码
}

1.3 示例

下面例子中, static块用于初始化静态成员变量count:

public class StaticBlockDemo {
    static int count;
    static {
        count = 0;
        System.out.println("执行了静态块");
    }
    public StaticBlockDemo() {
        count++;
        System.out.println("执行了构造函数");
    }
    public static void main(String[] args) {
        System.out.println("count=" + StaticBlockDemo.count);
        StaticBlockDemo s1 = new StaticBlockDemo();
        System.out.println("count=" + StaticBlockDemo.count);
        StaticBlockDemo s2 = new StaticBlockDemo();
        System.out.println("count=" + StaticBlockDemo.count);
    }
}

输出结果为:

执行了静态块
count=0
执行了构造函数
count=1
执行了构造函数
count=2

在类被加载时,先执行静态块中的初始化代码,然后执行main函数中的代码,最后执行构造函数。初始化代码中将count初始化为0,在构造函数中每次都会将count加1。因此,在执行构造函数时,count值分别为1和2。

二、构造函数

2.1 定义

构造函数是一种特殊的方法,用来初始化类的对象。在创建类的对象时,会自动地调用构造函数,并传入相应的参数。

2.2 语法

格式如下:

public class ClassName{
    public ClassName(){
        // 初始化代码
    }
}

2.3 示例

下面例子中,构造函数用于初始化对象的属性:

public class ConstructorDemo {
    String name;
    int age;
    public ConstructorDemo(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void show() {
        System.out.println("姓名:" + name + ",年龄:" + age);
    }
    public static void main(String[] args) {
        ConstructorDemo c = new ConstructorDemo("张三", 20);
        c.show();
    }
}

输出结果为:

姓名:张三,年龄:20

在创建ConstructorDemo对象时,会调用构造函数进行初始化。构造函数将传入的name和age赋值给对象的属性name和age,然后调用show方法输出属性值。

三、static块和构造函数的区别

static块和构造函数都可以用来初始化类的成员变量,但它们有以下区别:

  1. 执行顺序不同:类加载时,static块最先执行,而构造函数在对象创建时被调用;
  2. 初始化的对象不同:static块用于初始化静态成员变量,而构造函数用于初始化普通成员变量;
  3. 类中可以有多个构造函数,但只能有一个静态块,而且它通常只用于静态变量的初始化。

因此,在使用时需要根据需要进行选择。

The End

相关推荐

一文带你掌握Java8中Lambda表达式 函数式接口及方法构造器数组的引用
Lambda表达式是Java 8中引入的新特性之一,它是一个匿名函数,可以捕获参数并表现为一个代码块,而不像方法一样需要一个固定的名称。它主要用于传递行为或代码块以及事件处理等操作。...
2023-12-11 java编程
30

基于Java 谈回调函数
下面为您详细讲解基于Java的回调函数。...
2023-12-11 java编程
21

java equals函数用法详解
在Java中,equals()是用来比较两个对象是否相等的函数。equals()方法是Object类中的方法,因此所有Java类都包含equals()方法。在默认情况下,equals()方法比较对象的引用地址是否相同,即两个对象是否是同一个实例。但是,我们可以覆盖equals()方法,来定义自...
2023-12-11 java编程
63

JavaWeb学习笔记分享(必看篇)
JavaWeb是Java在Web领域的应用,是目前非常热门的技术之一。但是JavaWeb涉及到的技术非常广泛,初学者很容易迷失方向。本文总结了JavaWeb的基础知识,为初学者提供了一份学习笔记分享,希望能够帮助大家快速入门。...
2023-12-11 java编程
8

Java中replace、replaceAll和replaceFirst函数的用法小结
在Java编程中,字符串操作是很常见的,而替换字符串是其中常用的操作之一。Java提供了三种函数用于替换字符串:replace、replaceAll和replaceFirst。这篇文章将为您详细介绍它们的用法。...
2023-12-11 java编程
121

基于Java中进制的转换函数详解
进制是数学中一种表示数值大小的方法,常见的进制有10进制、2进制、16进制等。...
2023-12-11 java编程
45