Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 667
Kraken Avatar asked Sep 20 '11 13:09

Kraken


People also ask

What is a static class Java?

A static inner class is a nested class which is a static member of the outer class. It can be accessed without instantiating the outer class, using other static members. Just like static members, a static nested class does not have access to the instance variables and methods of the outer class.

Why do we use static class in Java?

In Java, static keyword is mainly used for memory management. It can be used with variables, methods, blocks and nested classes. It is a keyword which is used to share the same variable or method of a given class. Basically, static is used for a constant variable or a method that is same for every instance of a class.

What are static classes?

A static class is basically the same as a non-static class, but there is one difference: a static class cannot be instantiated. In other words, you cannot use the new operator to create a variable of the class type.

Do static classes exist in Java?

Java supports Static Instance Variables, Static Methods, Static Block, and Static Classes. The class in which the nested class is defined is known as the Outer Class. Unlike top-level classes, Inner classes can be Static. Non-static nested classes are also known as Inner classes.


1 Answers

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.

like image 183
Paul Sasik Avatar answered Sep 28 '22 03:09

Paul Sasik