Static Classes In Java

后端 未结 13 1552
慢半拍i
慢半拍i 2020-11-22 07:37

Is there anything like static class in java?

What is the meaning of such a class. Do all the methods of the static class need to be static

13条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-22 08:24

    Java has static nested classes but it sounds like you're looking for a top-level static class. Java has no way of making a top-level class static but you can simulate a static class like this:

    • Declare your class final - Prevents extension of the class since extending a static class makes no sense
    • Make the constructor private - Prevents instantiation by client code as it makes no sense to instantiate a static class
    • Make all the members and functions of the class static - Since the class cannot be instantiated no instance methods can be called or instance fields accessed
    • Note that the compiler will not prevent you from declaring an instance (non-static) member. The issue will only show up if you attempt to call the instance member

    Simple example per suggestions from above:

    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;
        }
    }
    

    What good are static classes? A good use of a static class is in defining one-off, utility and/or library classes where instantiation would not make sense. A great example is the Math class that contains some mathematical constants such as PI and E and simply provides mathematical calculations. Requiring instantiation in such a case would be unnecessary and confusing. See the Math class and source code. Notice that it is final and all of its members are static. If Java allowed top-level classes to be declared static then the Math class would indeed be static.

提交回复
热议问题