Static Classes In Java

后端 未结 13 1504
慢半拍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:12

    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(); 
      }
    }
    
    0 讨论(0)
  • 2020-11-22 08:17

    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.

    0 讨论(0)
  • 2020-11-22 08:20

    Can a class be static in Java ?

    The answer is YES, we can have static class in java. In java, we have static instance variables as well as static methods and also static block. Classes can also be made static in Java.

    In java, we can’t make Top-level (outer) class static. Only nested classes can be static.

    static nested class vs non-static nested class

    1) Nested static class doesn’t need a reference of Outer class, but Non-static nested class or Inner class requires Outer class reference.

    2) Inner class(or non-static nested class) can access both static and non-static members of Outer class. A static class cannot access non-static members of the Outer class. It can access only static members of Outer class.

    see here: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

    0 讨论(0)
  • 2020-11-22 08:20

    A static method means that it can be accessed without creating an object of the class, unlike public:

    public class MyClass {
       // Static method
       static void myStaticMethod() {
          System.out.println("Static methods can be called without creating objects");
       }
    
      // Public method
      public void myPublicMethod() {
          System.out.println("Public methods must be called by creating objects");
       }
    
      // Main method
      public static void main(String[ ] args) {
          myStaticMethod(); // Call the static method
        // myPublicMethod(); This would output an error
    
        MyClass myObj = new MyClass(); // Create an object of MyClass
        myObj.myPublicMethod(); // Call the public method
      }
    }
    
    0 讨论(0)
  • 2020-11-22 08:23

    Outer classes cannot be static, but nested/inner classes can be. That basically helps you to use the nested/inner class without creating an instance of the outer class.

    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题