• 主页
  • Java SE
  • J2ME
  • Web开发
  • Java EE
  • Eclipse
claider 2019年01月21日
import static和import有何区别?为何在我的这段简单代码里无发编译运行?谢谢
最近在看《thinking in java》 4th edition。章节Enumerated Types第一个习题

设我在当前目录下:有文件ChapterEnumExe1.java
import static enumerated.Signal;

// Define an enum type:
//enum Signal { GREEN, YELLOW, RED, }

//public class TrafficLight {
public class ChapterEnumExe1 {
Signal color = Signal.RED;
public void change() {
switch(color) {
// Note that you don't have to say Signal.RED
// in the case statement:
case RED: color = Signal.GREEN;
break;
case GREEN: color = Signal.YELLOW;
break;
case YELLOW: color = Signal.RED;
break;
}
}
public String toString() {
return "The traffic light is " + color;
}
public static void main(String[] args) {
ChapterEnumExe1 t = new ChapterEnumExe1();
for(int i = 0; i < 7; i++) {
System.out.println(t);
t.change();
}
}
} /* Output:
The traffic light is RED
The traffic light is GREEN
The traffic light is YELLOW
The traffic light is RED
The traffic light is GREEN
The traffic light is YELLOW
The traffic light is RED
*///:~

还有一个目录enumerated,其下有文件:
//ernumerated/Signal.java
package enumerated;

public enum Signal { GREEN, YELLOW, RED, }


在文件ChapterEnumExe1 中:
如果去掉import static enumerated.Signal;中的static,则可以得到正确结果
The traffic light is RED
The traffic light is GREEN
The traffic light is YELLOW
The traffic light is RED
The traffic light is GREEN
The traffic light is YELLOW
The traffic light is RED

否则的话,编译时提示如下错误:
ChapterEnumExe1.java:1: 错误: 找不到符号
import static enumerated.Signal;
^
符号: 类 enumerated
ChapterEnumExe1.java:1: 错误: 仅从类和接口静态导入
import static enumerated.Signal;
^
ChapterEnumExe1.java:8: 错误: 无法访问Signal
Signal color = Signal.RED;
^
错误的类文件: .\Signal.class
类文件包含错误的类: enumerated.Signal
请删除该文件或确保该文件位于正确的类路径子目录中。
ChapterEnumExe1.java:13: 错误: 找不到符号
case RED: color = Signal.GREEN;
^
符号: 变量 RED
位置: 类 ChapterEnumExe1
ChapterEnumExe1.java:15: 错误: 找不到符号
case GREEN: color = Signal.YELLOW;
^
符号: 变量 GREEN
位置: 类 ChapterEnumExe1
ChapterEnumExe1.java:17: 错误: 找不到符号
case YELLOW: color = Signal.RED;
^
符号: 变量 YELLOW
位置: 类 ChapterEnumExe1

请教各位高手,这是为啥?谢谢!
按照书上原文说法,应该是要做 static import,而且原作者代码中多处使用
import static net.mindview.util.Print.*;
...全文
17 点赞 收藏 1
写回复
1 条回复

还没有回复,快来抢沙发~

发动态
发帖子
Java
创建于2007-09-28

1.8w+

社区成员

8.1w+

社区内容

Java相关技术讨论
社区公告
暂无公告