Pages

Footer Pages

Spring Boot

Java String API

Java Conversions

Kotlin Programs

Kotlin Conversions

Java Threads Tutorial

Java 8 Tutorial

Wednesday, December 2, 2020

Java Import, Static Import with Examples

In this post, we will learn about import, static import statements in java.

Import Statement:

1) What is import statement?
2) How to use import statement?
3) What is the importance of import?
4) What is the drawback of import statement?
5) What is static import statement?
6) How to use static import statement?
7) What is the importance of static import?


Note: By default, "java.lang" package is available to all classes in Java.


More details on Package in Java.


Java Import, Static Import with Examples



What is important of import statement?



I have taken the following program to discuss about it. Please look into the program carefully which has String class used several times.
String class is an builtin java api which is present in java.lang.package. StringExample class has three string variables, all have been preceded by it's package name "java.lang".
This is making us to type lot of code which is unnecessary, code non readable and consumes lot of time if we have lengthy program.


package java.w3schools.utils;

public class StringExample {
    public static void main(String[] args) {
        // Taken three string variables named name, topic, email.
        java.lang.String name = "java" + "-" + "w3schools"; 
        java.lang.String topic = "java";
        java.lang.String email = "java@w3schools.com";
    }
} 

If we have repeated class usage then better to use import statements which makes the code clear and easily readable. In these scenarios, we can use import statements.
Import is a keyword in java and which is to indicate to include the package for a class or interface, enum.
The code could be as following instead of preceding package name.


import example:

package java.w3schools.utils;

import java.lang.String;

public class StringUtil {
    public static void main(String[] args) {
        // Taken three string variables named name, topic, email.
        String name = "java" + "-" + "w3schools";
        String topic = "java";
        String email = "java@w3schools.com";

    }
}

Import declaration is checked at compile time and not checked at runtime. If during runitme package class is not present then we will get the NoClassDefFoundError.

Once JVM finds String class, it maps to the import statement which is similar to the #include in C-Language studies in Graduation.


Example with multiple import statements:


The below program has 4 import statements for different classes but all are from java.util package.
package java.w3schools.utils;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class ImportExample {
    public static void main(String[] args) {
        // Multiple import statements.
        String name = "java" + "-" + "w3schools";
        List fruits = new ArrayList();
        Set ids = new HashSet();   
    }
}

All packages to be imported can be different from different packages as below.


import java.util.ArrayList;
import java.lang.Comparable;
import java.nio.charset;

If we have many classes that are required in the same class then Oracle java people have given the opportunity to utilize the all classes with wild character "*". Wild character makes available all classes from the given package in the current class.

Wild character "*" is used to import multiple classes from one package.

Wildcard import statement example:

import java.util.*;
public class WildcardImportExample {
    public static void main(String[] args) {
        // Wildcard import example for multiple classes.
        String name = "java" + "-" + "w3schools";
        List fruits = new ArrayList();
        Set ids = new HashSet();   
    }
}


This example uses List, ArrayList, Set, Hashset.
When compiler finds List interface, it looks into the package java.util for List interface. If it does not find, we will get compile time error as stated below.

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    List cannot be resolved to a type
   
Unless you want to use multiple classes from same package, Otherwise do not use wild card import statement.


Examples for Multiple imports:

import java.util.*;
import java.lang.*;
import java.lang.reflect.*;;
import java.util.concurrent.*;
import java.awt.*;
import java.util.concurrent.locks.*;

As you know, every java package has a lot of classes in java api.

Note: import java.* is not allowed to cover all class in java api and will get compile time error.

Benefits or Rules:


1) Imports helps in saving time.
2) makes codes readable.
3) Import statement right after package statement.
4) Import statement is not required if the class to be imported in the same package.
5) Imports allow us to use the classes in other package. 

Static import:

In most of time many classes are having Static members in it. Static members are extensively used in java api.

In java 5, static import feature allow programmer to use directly any static members of the class and no need to invoke with it's class name.


Syntax:

import static package.class name.static member name.

Should be "import static", not "static import".


Advantages of static import:


Greater keystroke-reduction capabilities and less coding (save typing).


Disadvantages of Static import:


Many people argue this makes code less readable.
If two class have the same for its static members then we will get ambiguity.


Example Before Static import:



package java.w3schools.utils;
public class BeforeStaticImport {
    public static void main(String[] args) {
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.MAX_VALUE);
    }
}

Observe, here MIN_VALUE, MAX_VALUE are static members in Integer class,
out is a static member in System class. Integer and System classes are from "java.lang" package.

We can use static import for better understanding.


Static import example:



package w3schools.utils;
import static java.lang.Integer.*;
import static java.lang.System.out;

public class StaticImportExample {
    public static void main(String[] args) {
        out.println(MIN_VALUE);
        out.println(MAX_VALUE);
    }
}


Used a wildcard character on Integer class and specified static member name on System class. If we want to use only one static member it it good specify the its name.

No comments:

Post a Comment

Please do not add any spam links in the comments section.