这是另一个问题:
package p1;
public class Temp {
public static int x=10;
public static void show(){
System.out.println("hello from show");
}
}
这是我的第二个文件的代码:
package p2;
import p1.*;
import static java.lang.System.*;
class StaticImport {
public static void main(String[] args) {
System.out.println(Temp.x);
Temp.show();
out.println(Temp.x + "hello");
}
}
现在这个程序正在运行,输出是:
10
hello from show
10hello
我尝试将用户定义的包导入到另一个包中,并设置了我的类路径。 Java规则说,当使用import一个静态类时,所有方法和数据成员都可以在不使用类名的情况下访问。
package p2;
import static p1.Temp;
import static java.lang.System.*;
class StaticImport {
public static void main(String[] args) {
System.out.println(x);
show();
out.println(x + "hello");
}
}
我收到了这个错误。为什么我不能将用户定义的包导入另一个包?
C:\java\static_import>javac -d . StaticImport.java
StaticImport.java:3: error: cannot find symbol
import static p1.Temp;
^
symbol: class p1
StaticImport.java:3: error: static import only from classes and interfaces
import static p1.Temp;
^
StaticImport.java:8: error: cannot find symbol
System.out.println(x);
^
symbol: variable x
location: class StaticImport
StaticImport.java:9: error: cannot find symbol
show();
^
symbol: method show()
location: class StaticImport
StaticImport.java:10: error: cannot find symbol
out.println(x + "hello");
^
symbol: variable x
location: class StaticImport
5 errors
答案 0 :(得分:3)
请改用import static p1.Temp.*;
。您尝试导入的静态对象不在p1
包中,而是在p1.Temp
类中。
评论后修改:
在C:\java\static_import
文件夹中,您必须:
p1
文件的Temp.java
文件夹; p2
文件的StaticImport.java
文件夹。在StaticImport.java
中,将import static p1.Temp;
行替换为import static p1.Temp.*;
。
最后,使用命令行:
cd C:\java\static_import
javac -d . p2/StaticImport.java
java p2/StaticImport
输出必须是:
10
hello from show
10hello
答案 1 :(得分:0)
您正在尝试导入包p1中的所有静态类,但Temp不是静态的,因此不会导入它。只需使用非静态导入。