How to use static keyword in Java

The static keyword in Java is a non-access modifier (keywords used to provide additional functionality such as synchronization etc), used primarily for memory management. The keyword static is used to refer to the common property of all objects.

The static keyword can be applied to variables, methods, blocks, and nested classes:

1. Static variable

If a variable is static, the variable is assigned memory once and all objects of the class access the same variable.

A static variable can be created by adding the static keyword before the variable during declaration.

Syntax

The general syntax for declaring a static variable is:

static datatype variable-name

Example

Consider making a simple class which implements the functionality of a counter by incrementing a variable count by one each time an instance of the class is created.

Using a static variable will create one copy of the count variable which will be incremented every time an object of the class is created.

class Counter {
static int count = 0;
Counter(){
count ++;
}
public void getCount() {
System.out.printf("Value of counter: %d \n", count);
}
public static void main( String args[] ) {
Counter c1 = new Counter(); //count incremented to 1
c1.getCount();
Counter c2 = new Counter(); //count incremented to 2
c2.getCount();
Counter c3 = new Counter(); //count incremented to 3
c3.getCount();
}
}

All objects of the Counter class will have the same value of count at any given point in time.

svg viewer

Note:

  • static variables can be created at class level only
  • A static variable is allotted memory once

2. Static method

Similar to static variables, static methods belong to the class and not every instance of the class object.

Syntax

The general syntax to create a static method within a class is:

public class foo {
public static void foo2(){
//code
}
}

Example

Consider making a Citizen class which contains a static variable country. We can update all instances of the static variable using a static method setCountry(). Execute the following code to see how this works.

class Citizen {
static String country;
Citizen() {
country = "Pakistan";
}
public static void setCountry(String c) {
country = c;
}
public void getCountry() {
System.out.printf("Current country: %s \n", country);
}
public static void main( String args[] ) {
Citizen c1 = new Citizen();
Citizen c2 = new Citizen();
Citizen c3 = new Citizen();
c1.getCountry();
c2.getCountry();
c3.getCountry();
Citizen.setCountry("USA");
c1.getCountry();
c2.getCountry();
c3.getCountry();
}
}

Note:

  • static methods cannot use this or super keywords
  • Abstract methods cannot be static
  • static methods cannot be overridden
  • static methods can only access static variables and other static methods

3. Static blocks

A static block is used for initializing static variables. The static block is executed once when the first object of the class is created.

Syntax

The general syntax of creating a static block is:

static {
//code
}

Example

The following code will initialize the static variables. Execute the code to see the values.

class Foo {
static int a;
static int b;
static {
a = 10;
b = 2 * a;
}
public static void main( String args[] ) {
Foo foo = new Foo();
System.out.printf("a = %d\t b = %d ", foo.a, foo.b);
}
}

Note:

  • There can be multiple static blocks in a class

4. Static nested class

A static nested class is a static class within a class. Static nested classes cannot access non-static data members and methods.

The static nested class can be accessed by the outer class without creating an object of the outer class.

Syntax

The general syntax to create a static nested class is:

class OuterClass {
static class InnerClass {
//code
}
}

Example

In the following example, the static nested class can be directly accessed in the main() without creating an object of the outer class.

class OuterClass {
static String message = "Hello World!";
static class InnerClass {
static void getMessage(){
System.out.println( message );
}
}
public static void main( String args[] ) {
OuterClass.InnerClass.getMessage();
}
}

Note:

  • A static nested class cannot access instance variables and methods of the outer class without the object’s reference
  • A static nested class can access all static variables and methods of the outer class
  • In Java, the outer class cannot be static

In Java, the main method is always static because it is executed before creating an instance of the class which contains the main method.

Free Resources

Copyright ©2024 Educative, Inc. All rights reserved