Welcome!

From the Trenches of the Enterprise Software

Yakov Fain

Subscribe to Yakov Fain: eMailAlertsEmail Alerts
Get Yakov Fain via: homepageHomepage mobileMobile rssRSS facebookFacebook twitterTwitter linkedinLinkedIn


Related Topics: Java Developer Magazine

Java Developer : Article

Java Basics: Lesson 11, Java Packages and Imports (Live Video Education)

Lesson 11 in the Hugely Popular "Java Basics" Series by JDJ Editorial Board Member Yakov Fain

Java 5.0 has introduced a new element called static imports. While regular import statements allow you to use the class name without specifying its package name, static imports go further and allow using static members of another class without specifying their class name. Let's use our good old HelloWorld program as an example:

public class HelloWorld {

public static void main(String[] args) {
System.out.println("Hello World");

}
}

Based on this syntax, we can guess that there is a static variable out in the class System that represents some object that in turn has a static method println(). Let's add the static import to eliminate the need of specifying the name of the class System in front of the variable out:

import static java.lang.System.*;
public class HelloWorld {

public static void main(String[] args) {
out.println("Hello World");

}
}

You do not have to use the wildcard (*) and import all static members from a class, but rather specific ones, for example

import static java.lang.System.out;

or for the PI constant from the Math package it can look like this:

import static java.lang.Math.PI;

For example:

import static java.lang.System.out;
import static java.lang.Math.PI;

public class HelloWorld {

public static void main(String[] args) {
out.println("Hello World123");
out.println("Hello PI: " + PI);
}
}

The good news is that if you need to call the println() method multiple times, your program becomes shorter now.

The bad side effect of static imports is that if you'll start overusing this feature, pretty soon your program will actually become less readable. For example, if you'll use static imports of multiple constants from various packages, and someone else (or even yourself five months later) will need to read this program, it may become difficult to understand where all these constants are coming from, especially if you've been using wildcards. The last HelloWorld example gives you an impression that PI constant has been declared somewhere in the HelloWorld class itself. In a small program it's easy to see that this is not the case, but in more complex applications consisting of hundreds of classes this can cause unnecessary confusions.

Prior to Java 5.0 you could have created Java interfaces containing only final static variables, for example

public interface MyConstants {
  public static final String companyName="XYZ, Inc.";
  public static final String companyAddress="123 Main st.";
}

Now any class that implements MyConstants can use this variables without even mentioning the name of the interface:

class Invoice implements MyConstants{
  public static void main(){
       System.out.println("Name:"+ companyName);
       System.out.println("Address: "+ companyAddress);
   }
}

Strictly speaking, if a class implements an interface, you'd expect it to implement some behavior which is not the case in the above example. That's why it's not a recommended way of using interfaces. Oh well, unless you have multiple interfaces with hundreds of constants, I do not see any damage in use of static imports or constant-only interfaces.

More Stories By Yakov Fain

Yakov Fain is a Java Champion and a co-founder of the IT consultancy Farata Systems and the product company SuranceBay. He wrote a thousand blogs (http://yakovfain.com) and several books about software development. Yakov authored and co-authored such books as "Angular 2 Development with TypeScript", "Java 24-Hour Trainer", and "Enterprise Web Development". His Twitter tag is @yfain

Comments (5)

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.