Java 中的静态类

在 Java 语言中,我们不能将外部类创建为静态类,但是有特权可以将嵌套的内部类创建为静态类。静态类的属性如下。

静态内部类永远不能访问外部类的非静态成员。

静态内部类不需要任何外部类引用来访问成员变量。

静态类永远无法实例化。因此,方法可以通过类名直接访问。

下面是演示上述两行的代码。

package static_class;
public class StaticInnerClass {
    static int i = 1;
    int j = 9;
    public static void main(String[] args) {
        StaticInnerClass s = new StaticInnerClass();
        // s.InnerClass.printNum();
        InnerClass.printNum();
    }
    public static class InnerClass {
        public static void printNum() {
            System.out.println(i);
            //System.out.println(j);
        }
    }
}

在上面的代码中,我们创建了一个名为 StaticInnerClass 的外部类。这个类有一个静态字段、非静态字段、静态方法和一个静态内部类。在静态 main 方法中,我们创建了一个名为 s 对象的外部类的实例。当我们尝试使用外部类对象访问内部类 printNum() 方法时,即 s.InnerClass.printNum(); IDE 给出一个编译时错误,它指出静态内部类不需要外部类引用对象的任何引用来访问内部类方法。因此,我们可以通过类名直接访问内部类方法。

现在当我们看到 printNum() 方法的定义时。它有两个打印语句。首先打印外部类的静态字段,然后尝试打印相同的非静态变量。语句 System.out.println(i); 是有效的,这意味着只能从静态上下文访问静态成员。但是看看第二个语句,System.out.println(j); 无效,因为永远不能从静态上下文访问非静态成员。

在 Java 类中,不可能创建外部类静态类。但是,我们可以使用一些定义的关键字来模仿行为。

final 关键字的使用是使类成为最终的。此关键字禁止类进一步扩展。原因是静态类的扩展没有用。

使用 private 关键字将构造函数设为私有,因为这会阻止静态类的实例化。正如静态类的属性所说,永远无法实例化它。

在成员变量和成员方法中使用 static 关键字。由于没有创建对象,因此永远无法访问非静态成员字段和函数。

下面是一个定义的静态类,它的用法用于制作 Utility 类,其中不需要创建此类的对象。

package static_class;
public final class StaticClass {
    private static int a = 1;
    private StaticClass() {
        System.out.println("Cannot be instantiated");
    }
    public static void printNum() {
        System.out.println(a);
    }
}