首页 > 编程笔记 > Java笔记 阅读:5

Java static用法详解(附带实例)

static 是 Java 非常重要的关键字之一,用于构造静态变量、静态常量、静态方法和静态初始化块,接下来将逐一讲解它们的用法。

Java静态变量

用关键字 static 修饰的成员变量称为静态变量,也叫类变量。

静态变量不属于任何一个具体对象,而是属于整个类。所有该类的对象共享同一个静态变量。

【实例】在一个项目中创建类 VariableDemo,实现创建静态变量,代码如下:
public class VariableDemo {
    // 静态变量
    static int num;
    static int num2;
}
在上述代码中,我们可以看出关键字 static 修饰的成员变量就是静态变量。每个类可以有多个静态变量,它们是类级变量,而非对象级变量。

在访问静态变量时,由于静态变量不依附某个对象,所以只需通过 “类名.静态变量” 的方式访问。

【实例】在一个项目中创建类 VariableDemo,实现访问静态变量,代码如下:
public class VariableDemo {
    // 静态变量
    static int num;
    static int num2;

    public static void main(String[] args) {
        VariableDemo05.num = 10;
        VariableDemo05.num2 = 20;
        System.out.println("The number is:" + VariableDemo.num);
        System.out.println("The number2 is:" + VariableDemo.num2);
    }
}
程序运行结果为:

The number is:10
The number2 is:20

在上述代码中,我们可以看出访问静态变量,不用创建对象,直接可以使用 “类名.属性名称”,属于类的级别,而不是对象级别。静态变量使用起来简单便捷,但不能全部使用静态变量,而是要按照需求来使用。

Java静态常量

静态常量(static final)与静态变量本质一样,也属于类的级别。静态常量值会在类加载期间被确定,并在整个程序执行期间保持不变。静态常量通常被用来表示不可变的值。

【实例】在一个项目中创建类 VariableDemo,实现创建静态常量,代码如下:
public class VariableDemo {
    final static int NUM = 10;
    final static int NUM2 = 20;
}
在上述代码中,我们可以看出定义静态常量时需要使用关键字 final,关键字 final 在后续的课程中会详细讲解。代码中常量的名称是大写,对此没有明确规定,即使按照变量规定去写常量也不会出现编译错误,这么做能够让你在阅读代码时清晰识别出哪些是静态常量。

Java静态方法

静态方法可以直接通过类名调用,而不需要创建对象。

静态方法不能直接访问非静态成员(成员变量和成员方法),因为静态方法在类加载时就存在了,而此时非静态成员可能还没有被创建。

【实例】在一个项目中创建类 VariableDemo,实现创建静态方法,代码如下:
public class VariableDemo {
    // 创建静态方法
    public static void testDemo() {
        System.out.println("静态方法");
    }
}
在上述代码中,我们可以看出关键字 static 修饰的方法是静态方法。

【实例】在一个项目中创建类 VariableDemo,实现调用静态方法,代码如下:
public class VariableDemo {
    // 创建静态方法
    public static void testDemo() {
        System.out.println("静态方法");
    }

    public static void main(String[] args) {
        // 调用静态方法
        VariableDemo.testDemo();

        VariableDemo variableDemo = new VariableDemo();
        variableDemo.testDemo();
    }
}
程序运行结果为:

静态方法
静态方法

在上述代码中,我们可以看出调用静态方法既可以直接使用 “类名.方法名称”,又可以使用 “对象名.方法名称”。这么做本身不会出现编译错误,但不建议这么做。

使用静态方法时需要注意,静态方法可以访问静态方法,非静态方法可以访问静态方法,静态方法不可以访问非静态方法,因为非静态方法或非静态变量的调用要先创建对象,而在调用静态方法时可能对象并没有被初始化。

此外,在静态方法中不可以使用关键字 this,因为静态方法本身与对象无关,而是属于类的级别。

Java静态初始化块

静态初始化块是一个被关键字 static 声明的代码块,没有任何参数或返回值。在 Java 编程语言中,可以使用静态初始化块来初始化静态变量。静态初始化块在类被加载时执行,而且只执行一次。

【实例】在一个项目中创建类 VariableDemo,实现调用静态初始化块,代码如下:
public class VariableDemo {
    static int num;
    static String name;

    // 静态初始化块给静态变量赋值
    static {
        num = 10;
        name = "静态初始化块";
    }

    public static void main(String[] args) {
        System.out.println(VariableDemo.num);
        System.out.println(VariableDemo.name);
    }
}
程序运行结果为:

10
静态初始化块

在上述代码中,当类在第一次加载时,若有静态初始化块,则会执行静态初始化块代码,静态初始化块代码优先于构造方法执行。而且,不管你是否创建对象,它都会执行且只执行一次(与实例对象无关)。所有的静态变量初始化和静态初始化块以其在类中声明的顺序来执行。

相关文章