Static VS Instance
Static keyword in Java is used for memory management.
used for keeping the same copy of variables or methods for every instance of a class
If a member of a class is static, it can be accessed before any objects are created for that class and also without any object reference.
Static vs Non-Static variables
If a field has the same value for all instances, it should be static
beacuse its a wastage of memory as for each object created it would allocate memory for that field variable for each of the instances created and further assign the given value in it.
As a static variable, it would independent of the no. of instances created thereby saving memory.
Static vs Non-Static Methods
Static methods are utility methods in a class which can be exposed to other classes without having to create an instance of the owner class to call the method.
static methods are less memory intensive compared to non-static methods
a non-static method is an instance-based method that needs to be called by specific instances of the class and the behavior of such methods completely depends on the state of the objects which calls them.
Also used for factory methods
Difference
Access
A static method can access only static members and can not access non-static members.
A non-static method can access both static as well as non-static members.
Binding
Static method uses complie time binding or early binding.
Non-static method uses run time binding or dynamic binding.
Overriding
A static method cannot be overridden being compile time binding.
A non-static method can be overridden being dynamic binding.
Memory allocation
Static method occupies less space and memory allocation happens once.
A non-static method may occupy more space. Memory allocation happens when method is invoked and memory is deallocated once method is executed completely.
Keyword
A static method is declared using static keyword.
A normal method is not required to have any special keyword.
Static Initialization block vs initialization block
a block is a set of statements enclosed within curly braces which are used as a compound statement or a single unit of code.
used in Methods, if-else statements, loops, and lambdas,
blocks which are not used by other Java constructs are Independent blocks
are broad of two types namely
static initializer blocks
static keyword is used to define a static initialization block.
gets loaded as soon as a class gets loaded in the memory and is not associated with a call to the constructor of a class during object creation.
can only access static members of its class i.e. static variables and static methods.
The superclass constructor is not called automatically from the static initialization block.
called just once during the entire execution of the program when the class loads.
even called before the main method.
initializer blocks
An instance initialization block can be defined without using any special keyword.
only executed when there is a call to the constructor during object creation.
can both static as well as non-static members of its class i.e. static and non-static variables and methods.
An automatic call to super class constructor is made by using the super() before executing any statement in the instance initialization block.
called as many times as a call to the constructor of the class is made.
Static Inner class vs Inner class
Nested classes class inside another class
two types
static and non-static
Non-static nested classes are called inner classes.
A nested class is a member of its enclosing class.
Non-static nested classes (inner classes) have access to other members of the enclosing class, even if they are declared private
Static nested classes do not have access to other members of the enclosing class.
As a member of the OuterClass, a nested class can be declared private, public, protected, or package-private
outer classes can only be declared public or package-private
Why Use Nested Classes?
It is a way of logically grouping classes that are only used in one place
It increases encapsulation
Only outer class can use it
It can lead to more readable and maintainable code
places the code closer to where it is used.
a static nested class cannot refer directly to instance variables or methods defined in its enclosing class: it can use them only through an object reference.
a static nested class is behaviorally a top-level class that has been nested in another top-level class for packaging convenience.
an inner class is associated with an instance of its enclosing class and has direct access to that object’s methods and fields.
because an inner class is associated with an instance, it cannot define any static members itself.
An instance of InnerClass can exist only within an instance of OuterClass and has direct access to the methods and fields of its enclosing instance.
To instantiate an inner class, you must first instantiate the outer class. Then, create the inner object within the outer object
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
As main() method can’t be declared, regular inner class can’t be invoked directly from the command prompt.
As main() method can be declared, the static nested class can be invoked directly from the command prompt.
Last updated
Was this helpful?