静态关键字在导入java.lang.System类时扮演什么角色?

静态关键字在导入java.lang.System类时扮演什么角色?,java,import,package,java.lang.class,Java,Import,Package,Java.lang.class,导入System类时,我不理解关键字static的含义: import static java.lang.System.* 我正在读一本关于Java的书,书中写到: 任何不使用单词static的导入声明都必须启动 使用包的名称,并且必须以以下任一项结尾: 该包中的类的名称 星号(表示该包中的所有类) 例如,声明导入java.util.Scanner是有效的 因为java.util是JavaAPI中的包的名称,并且 Scanner是java.util包中的类的名称 这是另一个例子。声明imp

导入
System
类时,我不理解关键字
static
的含义:

import static java.lang.System.*
我正在读一本关于Java的书,书中写到:

任何不使用单词
static
的导入声明都必须启动 使用包的名称,并且必须以以下任一项结尾:

  • 该包中的类的名称
  • 星号(表示该包中的所有类)
例如,声明导入
java.util.Scanner是有效的
因为
java.util
是JavaAPI中的包的名称,并且
Scanner
java.util
包中的类的名称

这是另一个例子。声明
importjavax.swing.*是有效的
因为
javax.swing
是JavaAPI中的包的名称 星号表示
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.*
a. import static java.lang.System.out;
b. import static java.lang.System.*
但当我尝试这样做时,它不起作用:

import java.lang.System.out;
import java.lang.System.*
c. import java.lang.System.out;
d. import java.lang.System.*;
在这种特殊情况下,
static
关键字的含义是什么


为什么导入java.lang.*
不会导入包含
系统
类的整个包?

A
静态
导入允许您编写以下内容:

out.print("The result is ");
与此相反:

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

例如,请参见..

我经常在单元测试中使用静态导入,如下所示:

import static org.junit.Assert.*;
这允许我编写以下代码:

assertEquals(2, list.size());
Assert.assertEquals(2, list.size());
而不是此代码:

assertEquals(2, list.size());
Assert.assertEquals(2, list.size());

静态导入是Java编程语言中引入的一项功能,它允许在Java代码中使用类中定义为公共静态的成员(字段和方法),而无需指定定义字段的类。该功能是在5.0版中引入该语言的

该特性提供了一种类型安全机制,可以在代码中包含常量,而不必引用最初定义字段的类。它还有助于反对创建常量接口的做法:只定义常量的接口,然后编写实现该接口的类,这被认为是对接口的不当使用

当您使用static关键字导入时,这意味着您只是以某种方式将其插入到您的类中,并且您可以像调用自己的类的方法一样使用它的方法

例如:

import static java.lang.Math.*;
import static java.lang.System.out;
以及:


问题:

1)以这种方式导入时,它会起作用:

import static java.lang.System.out;
import static java.lang.System.*
a. import static java.lang.System.out;
b. import static java.lang.System.*
但当我尝试这样做时,它不起作用:

import java.lang.System.out;
import java.lang.System.*
c. import java.lang.System.out;
d. import java.lang.System.*;
2)在这种特殊情况下,static关键字的含义是什么

3)以及为什么要导入java.lang.*;不导入包含系统类的整个包吗

-------------------------------------------------------------------------------- 答案:

1)&2)静态导入例如(import static java.lang.System.out)用于从系统类导入在其他类中声明为静态的方法或字段

a. import static java.lang.System.out; //Works because "out" is a static field
b. import static java.lang.System.*; //Works because you are importing ALL static fields and methods inside the System class

c. import java.lang.System.out; //Does NOT work because you are trying to import a static field in a non-static way. (see a.)
d. import java.lang.System.*; //Actually Works because of the * wildcard which allows you to include all imports.
您希望以静态方式导入方法或字段的主要原因是,您可以省略对这些方法或字段的所有调用的类规范。因此,与其写:

System.out.print("Hello");
System.out.print("World");
只写

import static java.lang.System.*   //or   import static java.lang.System.out if you only plan on using the 'out' field.
out.print("Hello");
out.print("World");
3)导入java.lang.*是多余的Java自动并隐式地为您导入此软件包!:)是的,它会随它导入系统类,但不要混淆,除非您将其作为静态导入导入,否则您仍然需要写出漫长的道路:

System.out.print("hi");

为什么要导入java.lang.System?现在只需要能够很快编写print语句
out.print(num)
系统
word。但是后来我想为什么不导入整个
java.lang
包,而不是只导入
系统
。我试过了,但还是出错了。