使用包成员
组成包的类称为包成员。
要从包的外部使用公共包成员,必须执行以下操作之一:
1. 通过其完全限定名称来引用成员
2. 导入包成员
3. 导入成员的整个包
1.1 通过限定名称引用包成员
graphics.Rectangle myRect = new graphics.Rectangle();
2.1 导入包成员
import graphics.Rectangle;
现在您可以通过简单的名称来引用Rectangle类。
Rectangle myRectangle = new Rectangle();
3.1 倒入整个包
import graphics.*;
现在,您可以通过简单的名称引用图形包中的任何类或接口。
Circle myCircle = new Circle();
Rectangle myRectangle = new Rectangle();
import语句中的星号只能用于指定包中的所有类,如下所示。它不能用于匹配包中类的子集。例如,下面的代码不匹配图形包中以A开头的所有类。
//不工作
进口graphics.A*;
相反,它会生成一个编译器错误。使用import语句,通常只导入单个包成员或整个包。
您可以使用以下两条语句导入Rectangle及其嵌套类。
import graphics.Rectangle;
import graphics.Rectangle.*;
请注意,第二个import语句不会导入Rectangle。
包的层次结构
import java.awt.* 导入java java.awt包的所有类,但它不导入java.awt.color, java.awt.font,或任何其他java.awt.xxxx包。如果您计划使用java.awt.color 和java.awt的类
,您必须导入这两个包及其所有文件:
import java.awt.*;
import java.awt.color.*;
多个包中有相通的类名
如果一个包中的成员与另一个包中的成员类名相同,并且两个包都被导入,则必须通过其限定名称引用每个成员。例如,图形包定义了一个名为Rectangle的类。java.awt包还包含一个Rectangle类。如果既有图形又有java。如果已经导入,下面的内容是不明确的。
Rectangle rect;
在这种情况下,您必须使用成员的完全限定名来准确指示您想要的是哪个Rectangle类。
graphics.Rectangle rect;
静态导入
在某些情况下,您需要频繁访问来自一个或两个类的静态final字段(常量)和静态方法。反复给这些类的名字加上前缀可能会导致代码混乱。静态导入语句为您提供了一种导入您想要使用的常量和静态方法的方法,这样您就不需要在它们的类名前面加上前缀。
java.lang.Math类定义了PI常数和许多静态方法,包括计算正弦、余弦、正切、平方根、最大值、最小值、指数等的方法。
public static final double PI
= 3.141592653589793;
public static double cos(double a)
{
...
}
通常,要使用来自另一个类的这些对象,需要在类名前加上前缀,如下所示。
double r = Math.cos(PI * theta);
您可以使用静态导入语句导入java.lang.Math的静态成员,这样就不需要在类名Math前面加上前缀。
import java.lang.Math.PI;
或作为一个群体:
import java.lang.Math.*;
一旦导入了静态成员,就可以不加限制地使用它们。例如,前面的代码片段将变成:
double r = cos(PI*theta);
显然,您可以编写自己的类,其中包含经常使用的常量和静态方法,然后使用静态导入语句。
import static mypackage.MyConstants.*;
个人公众号: