Какова роль ключевого слова static при импорте класса java.lang.System?

Я не понимаю значения ключевого слова staticпри импорте Systemclass:

import static java.lang.System.*

Читаю книгу про Java и там написано:

Any объявление импорта, в котором не используется слово static, должно начинаться с именем пакета и должно заканчиваться одним из следующих символов:

  • Имя класса в этом пакете
  • Звездочка (указывающая на все классы в этом пакете)

Например, объявление import java.util.Scanner;допустим потому что java.util— это имя пакета в Java API, и Scanner— это имя класса в пакете java.util.

Вот еще один пример. Объявление import javax.swing.*;действительно потому что javax.swing— это имя пакета в Java API, а звездочка относится ко всем классам в пакете javax.swing.

И у меня есть следующий код:

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(" .");
   }
}

И это работает, когда я импортирую таким образом:

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

Но не работает, когда я пытаюсь сделать это:

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

Что означает staticключевое слово в данном конкретном случае?

И зачем импортировать java.lang.*;не импортирует весь пакет с классом Systemв нем?

6
задан Green 25 May 2012 в 14:55
поделиться