-1

这是另一个问题:

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 规则说,当使用静态类导入时,所有方法和数据成员都可以在不使用类名的情况下访问。

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
4

2 回答 2

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
于 2013-10-09T13:59:01.047 回答
0

您正在尝试导入包 p1 中的所有静态类,但是 Temp 不是静态的,因此它没有被导入。只需使用非静态导入。

于 2013-10-09T14:01:00.743 回答