Static class in Java - GeeksforGeeks

25 Feb, 2022
Java allows a class to be defined within another class. These are called Nested Classes. Classes can be static which most developers are aware of, henceforth some classes can be made static 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.
An instance of an inner class cannot be created without an instance of the outer class. Therefore, an inner class instance can access all of the members of its outer class, without using a reference to the outer class instance. For this reason, inner classes can help make programs simple and concise. 
Remember: In static class, we can easily create objects.
Differences between Static and Non-static Nested Classes
The following are major differences between static nested classes and inner classes. 
A static nested class may be instantiated without instantiating its outer class.Inner classes can access both static and non-static members of the outer class. A static class can access only the static members of the outer class.
A static nested class may be instantiated without instantiating its outer class.
Inner classes can access both static and non-static members of the outer class. A static class can access only the static members of the outer class.
Example 
Java
// Java program to Demonstrate How to// Implement Static and Non-static Classes // Class 1// Helper classclass OuterClass {     // Input string    private static String msg = "GeeksForGeeks";     // Static nested class    public static class NestedStaticClass {         // Only static members of Outer class        // is directly accessible in nested        // static class        public void printMessage()        {             // Try making 'message' a non-static            // variable, there will be compiler error            System.out.println(                "Message from nested static class: " + msg);        }    }     // Non-static nested class -    // also called Inner class    public class InnerClass {         // Both static and non-static members        // of Outer class are accessible in        // this Inner class        public void display()        {             // Print statement whenever this method is            // called            System.out.println(                "Message from non-static nested class: "                + msg);        }    }} // Class 2// Main classclass GFG {     // Main driver method    public static void main(String args[])    {         // Creating instance of nested Static class        // inside main() method        OuterClass.NestedStaticClass printer            = new OuterClass.NestedStaticClass();         // Calling non-static method of nested        // static class        printer.printMessage();         // Note: In order to create instance of Inner class        //  we need an Outer class instance         // Creating Outer class instance for creating        // non-static nested class        OuterClass outer = new OuterClass();        OuterClass.InnerClass inner            = outer.new InnerClass();         // Calling non-static method of Inner class        inner.display();         // We can also combine above steps in one        // step to create instance of Inner class        OuterClass.InnerClass innerObject            = new OuterClass().new InnerClass();         // Similarly calling inner class defined method        innerObject.display();    }}
Message from nested static class: GeeksForGeeks
Message from non-static nested class: GeeksForGeeks
Message from non-static nested class: GeeksForGeeks
This article is contributed by Chandra Prakash. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
mailjesseduncan
rajkit
simmytarika5
Java
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Object Oriented Programming (OOPs) Concept in Java
HashMap in Java with Examples
Stream In Java
How to iterate any Map in Java
ArrayList in Java
Initialize an ArrayList in Java
Stack Class in Java
Singleton Class in Java
Multidimensional Arrays in Java
Set in Java