static关键字在导入java.lang.System类中的作用是什么?

Gre*_*een 6 java import package java.lang.class

static导入System类时我不明白关键字的含义:

import static java.lang.System.*
Run Code Online (Sandbox Code Playgroud)

我正在读关于Java的书,它写在那里:

任何不使用该单词的导入声明都static必须以包的名称开头,并且必须以下列任一方式结束:

  • 该包中的类的名称
  • 星号(表示该包中的所有类)

例如,声明导入 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(" .");
   }
}
Run Code Online (Sandbox Code Playgroud)

当我以这种方式导入时它可以工作:

import static java.lang.System.out;
import static java.lang.System.*
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这样做时不起作用:

import java.lang.System.out;
import java.lang.System.*
Run Code Online (Sandbox Code Playgroud)

static在这种特殊情况下,关键字的含义是什么?

为什么import java.lang.*;不用类导入整个包System呢?

Oli*_*rth 11

一个static进口允许你这样写:

out.print("The result is ");
Run Code Online (Sandbox Code Playgroud)

而不是这个:

System.out.print("The result is ");
Run Code Online (Sandbox Code Playgroud)

参见例如http://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html.