原创

java面试题-深度解析Java中final与static关键字的区别及应用场景

在Java编程中,final和static是两个关键字,它们都可以用于修饰类、方法、成员变量,但却有着不同的作用和应用场景。本教程将详细讨论final与static的区别,并通过实例代码演示它们在Java中的应用。

1. final与static的共同点

修饰类、方法、成员变量: final和static都可以用于修饰类、方法、成员变量,使得其具有特殊的语义和行为。
不能用于修饰构造方法: 无论是final还是static,都不能用于修饰构造方法,因为构造方法有其独特的初始化过程。

2. final与static的区别

2.1 static的特性

表示静态或全局: 被static修饰的属性和方法属于类,可以通过类名.静态属性/方法名访问。
静态代码块: static可以修饰类的代码块,表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块,只会被执行一次。
类变量: static修饰的属性是类变量,在类加载时被创建并初始化,只会被创建一次。
可重新赋值: static修饰的变量可以重新赋值。
this和super关键字: 在static方法中不能使用this和super关键字。
不能是抽象方法: static方法必须被实现,不能是抽象的。
不能被重写: static方法不能被子类重写。

2.2 final的特性

表示常量: 被final修饰的成员变量表示常量,一旦创建不可改变。
赋值要求: final标记的成员变量必须在声明的同时赋值,或在该类的构造方法中赋值,不可以重新赋值。
不能被子类重写: final方法不能被子类重写。
类不能被继承: final修饰的类不能被继承,没有子类。final类中的方法默认是final的。

3. 代码演示

3.1 static的应用

public class StaticExample {
    // 静态变量
    public static int staticVariable = 10;

    // 静态代码块
    static {
        System.out.println("Static Block");
    }

    // 静态方法
    public static void staticMethod() {
        System.out.println("Static Method");
    }

    // 静态内部类
    static class StaticInnerClass {
        // 静态内部类的成员变量
        static int innerClassVariable = 5;
    }
}

3.2 final的应用

public class FinalExample {
    // 常量
    public final int CONSTANT_VALUE = 20;

    // final方法
    public final void finalMethod() {
        System.out.println("Final Method");
    }

    // final内部类
    final class FinalInnerClass {
        // final内部类的成员变量
        final int innerClassVariable = 8;
    }
}
正文到此结束
本文目录