Static Classes In Java

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 too?

Is it required the other way round, that if a class contains all the static methods, shall the class be static too?

What are static classes good for?


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 Java's Math class. 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.


    Well, Java has "static nested classes", but they're not at all the same as C#'s static classes, if that's where you were coming from. A static nested class is just one which doesn't implicitly have a reference to an instance of the outer class.

    Static nested classes can have instance methods and static methods.

    There's no such thing as a top-level static class in Java.


    There is a static nested class, this [static nested] class does not need an instance of the enclosing class in order to be instantiated itself.

    These classes [static nested ones] can access only the static members of the enclosing class [since it does not have any reference to instances of the enclosing class...]

    code sample:

    public class Test { 
      class A { } 
      static class B { }
      public static void main(String[] args) { 
        /*will fail - compilation error, you need an instance of Test to instantiate A*/
        A a = new A(); 
        /*will compile successfully, not instance of Test is needed to instantiate B */
        B b = new B(); 
      }
    }
    
    链接地址: http://www.djcxy.com/p/13282.html

    上一篇: 如何将Java方法声明或标记为已弃用?

    下一篇: Java中的静态类