欢迎访问宙启技术站
智能推送

了解Java函数的关键字final和static的差异

发布时间:2023-05-22 10:10:13

Java是一种面向对象的编程语言,具有强大的功能和丰富的特性。为了学习Java,必须了解一些关键字和使用方法。本文将着重介绍Java函数中最常见的两个关键字:final和static。

1. final关键字

final是Java中的关键字之一,用于指示数据或方法定义不可更改。final关键字可以应用于类、方法和变量。当final关键字应用于变量时,无法更改该变量的值。当final关键字应用于方法时,无法覆盖该方法。当final关键字应用于类时,该类不可被继承。

1.1 final变量

final变量是指值不可更改的变量。这通常用于声明常量。在声明final变量时,必须分配一个初始值,并且不能重新分配值。以下是一个示例:

final int MIN_AGE = 18;

//凡是定义了final变量,都应该大写,默认为常量。

在此示例中,MIN_AGE被定义为一个final变量,在定义时已被分配了初始值。无法重新分配该变量的值。

1.2 final方法

当声明一个函数为final时,表示不能在子类中重写此函数。因此,final函数是不可继承的。以下是一个示例:

class Parent {

    final void show() {

        System.out.println("Parent show method");

    }

}

class Child extends Parent {

    void show() { //编译错误:show()在Child中不能覆盖show()在Parent中

        System.out.println("Child show method");

    }

}

在此示例中,Parent类中的show函数被声明为final,该函数不可被子类重写。

1.3 final类

当声明一个类为final时,这个类不能被继承。以下是一个示例:

final class MyClass {

    //类定义

}

在此示例中,MyClass被声明为final,这意味着它不能被继承。

2. static关键字

static是Java中的另一个关键字,用于指示变量或方法按类而非实例进行管理。当变量或方法被声明为static时,它们可以在不创建类实例的情况下访问。static关键字可以应用于变量、方法和嵌套类。

2.1 static变量

静态变量是指类级别的变量,无需实例即可访问。当声明一个变量为静态变量时,它仅在该类的加载期间创建一次,且在所有实例之间共享,直到程序退出。以下是一个示例:

class MyClass {

    static int count = 0;

    MyClass() {

        count++;

    }

}

在此示例中,MyClass类中的count变量被声明为静态变量,在MyClass的每个实例构造函数被调用时,count变量的值将在所有实例中增加1。

2.2 static方法

静态方法是指按类级别、而不是实例进行管理的方法。当声明一个方法为静态方法时,该方法可以在不创建类实例的情况下进行调用。以下是一个示例:

class MyClass {

    static void print() {

        System.out.println("Hello World");

    }

    public static void main(String[] args) {

        MyClass.print();

    }

}

在此示例中,MyClass类中的print方法被声明为静态方法,该方法可以在不创建类实例的情况下进行调用。main函数中直接调用MyClass.print(),而不是先创建MyClass的实例。

2.3 static嵌套类

静态嵌套类是指按类级别、而不是实例进行管理的嵌套类。当声明一个类为静态嵌套类时,该类可以在不创建外部类实例的情况下进行实例化。以下是一个示例:

public class Outer {

    static class Inner {

        void print() {

            System.out.println("Inner class");

        }

    }

    public static void main(String[] args) {

        Outer.Inner inner = new Outer.Inner();

        inner.print();

    }

}

在此示例中,Outer类中的Inner类被声明为静态嵌套类,该类可以在不创建Outer实例的情况下进行实例化。

3. final和static的差异

final和static都是Java中的关键字,但它们有很大的不同。final关键字指示定义不可更改;而static关键字指示变量或方法按类级别进行管理。

final变量的值不能更改,即使它们是按实例进行定义的,也仅对该实例有效。在另一方面,static变量是按类级别进行管理的,其值在所有实例之间共享。

final方法不能被重写且不可继承,而static方法可以被继承和重写。此外,静态方法可以在不创建类实例的情况下进行调用。

final类不能被继承,而静态类可以被继承。

静态嵌套类可以在不创建外部类实例的情况下进行实例化;final嵌套类需要创建外部类实例才能访问。

综上所述,final和static虽然有相似之处,但是它们的作用范围和使用方式是不同的,程序员应该了解它们之间的异同点,并根据此进行合理使用。