静态关键字在导入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
包,而不是只导入系统
。我试过了,但还是出错了。