Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the role of static keyword in importing java.lang.System class?

I don't understand the meaning of the keyword static when I import System class:

import static java.lang.System.*

I'm reading the book about Java and it's written there:

Any import declaration that doesn't use the word static must start with the name of a package and must end with either of the following:

  • The name of a class within that package
  • An asterisk (indicating all classes within that package)

For example, the declaration import java.util.Scanner; is valid because java.util is the name of a package in the Java API, and Scanner is the name of a class in the java.util package.

Here’s another example. The declaration import javax.swing.*; is valid because javax.swing is the name of a package in the Java API, and the asterisk refers to all classes in the javax.swing package.

And I have the following code:

public class Addition {

   public static void main(String[] args) {
      double num;
      num = 100.53;

      num = num + 1000;

      // So when I want to import the whole package java.lang as written in the book, it doesn't work:
      // import java.lang.*;
      // or like this:
      // import static java.lang.*;
      // NetBeans in both cases doesn't see these abbreviated names `out` and throws errors. Why?
      out.print("The result is ");
      out.print(num);
      out.println(" .");
   }
}

And it works when I import this way:

import static java.lang.System.out;
import static java.lang.System.*

But doesn't work when I try do this:

import java.lang.System.out;
import java.lang.System.*

What's the meaning of the static keyword in this particular case?

And why import java.lang.*; doesn't import the whole package with System class in it?

like image 741
Green Avatar asked May 25 '12 14:05

Green


2 Answers

A static import allows you to write this:

out.print("The result is ");

rather than this:

System.out.print("The result is ");

See e.g. http://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html.

like image 126
Oliver Charlesworth Avatar answered Oct 19 '22 23:10

Oliver Charlesworth


I often use static imports in my unit tests, like so:

import static org.junit.Assert.*;

This allows me to write this code:

assertEquals(2, list.size());

Instead of this code:

Assert.assertEquals(2, list.size());
like image 23
Jeff Olson Avatar answered Oct 20 '22 00:10

Jeff Olson