Java中的静止类 | Java-Debug实录

提问:Java中的静止类

在Java中是否有类似静态类的东西?

这种类的意义是什么?静态类的所有方法也需要是静态的吗?

是否需要反过来说,如果一个类包含所有的静态方法,那么这个类也应该是静态的?

静态类有什么用?

回答1:

Java有静态嵌套类,但听起来你在寻找一个顶层的静态类。Java没有办法使顶层类成为静态类,但你可以这样模拟一个静态类。

宣布你的类为最终类–防止类的扩展,因为扩展一个静态类是没有意义的。
使构造函数私有化–防止客户端代码的实例化,因为实例化一个静态类是没有意义的。
使类的所有成员和函数静态化–因为类不能被实例化,所以不能调用实例方法或访问实例字段。
注意,编译器不会阻止你声明一个实例(非静态)成员。这个问题只有在你试图调用实例成员时才会显示出来。
根据上面的建议,举个简单的例子。

public class TestMyStaticClass {
     public static void main(String []args){
        MyStaticClass.setMyStaticMember(5);
        System.out.println("Static value: " + MyStaticClass.getMyStaticMember());
        System.out.println("Value squared: " + MyStaticClass.squareMyStaticMember());
        // MyStaticClass x = new MyStaticClass(); // results in compile time error
     }
}

// A top-level Java class mimicking static class behavior
public final class MyStaticClass {
    private MyStaticClass () { // private constructor
        myStaticMember = 1;
    }
    private static int myStaticMember;
    public static void setMyStaticMember(int val) {
        myStaticMember = val;
    }
    public static int getMyStaticMember() {
        return myStaticMember;
    }
    public static int squareMyStaticMember() {
        return myStaticMember * myStaticMember;
    }
}
复制代码

静态类有什么用?

静态类的一个很好的用途是定义一次性的、和实用的/或库类,在那里实例化是没有意义的。一个很好的例子是Math类,它包含了一些数学常数,如PI和E,并简单地提供数学计算。在这种情况下,要求实例化是不必要的,也是令人困惑的。请看Math类和源代码。请注意,它是最终的,其所有成员都是静态的。如果Java允许顶层类被声明为静态,那么Math类确实会是静态的。

回答2:

Java有 “静态嵌套类”,但它们与C#的静态类完全不一样,如果你是从那里来的。静态嵌套类只是一个不隐含对外层类实例的引用的类。

静态嵌套类可以有实例方法和静态方法。

在Java中没有顶层静态类这样的东西。

文章翻译自Stack Overfloww:stackoverflow.com/questions/7…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享