我在java堆栈操作上编写了一个非常简单的程序。我在OS X 10.9.1中使用Java(TM)SE运行时环境。我试过JDK build 1.7.0_13-b20并构建1.7.0_51-b13,两者都不适合我。我只想测试java Stack类。我没有私有堆栈实现。并且$ CLASSPATH环境变量设置为空。
我使用JDK 1.7.0_25在Windows(Win 8.1)上测试了相同的程序。它工作正常。
import java.util.*;
public class MyStackTest
{
public static void main(String[] args){
Stack<Integer> mys = new Stack<Integer>();
mys.push(5);
while ( ! mys.empty() ) {
System.out.println(mys.peek());
mys.pop();
}
}
}
然而,在使用javac 1.7.0_13进行编译时,我得到了“找不到符号”错误:
$ javac MyStackTest.java -Xlint
MyStackTest.java:9: error: cannot find symbol
while ( ! mys.empty() ) {
^
symbol: method empty()
location: variable mys of type Stack<Integer>
1 error
我发现如果我将import语句更改为
import java.util.Stack
程序编译好。为什么“import java.util。”会导致问题?如何判断java.util中的哪个类。导致问题?
谢谢!
答案 0 :(得分:2)
您可能在Stack
类的同一个包中有MyStackTest
实现(在本例中为默认包名)。在new Stack
之后注释掉所有内容并打印出类类型。如果它不是java.util.Stack
那么你就找到了答案。
import java.util.*;
public class MyStackTest
{
public static void main(String[] args){
Stack<Integer> mys = new Stack<Integer>();
System.out.println(mys.getClass());
}
}
另一种可能性是mys.empty()
中有非UTF8字符。尝试删除该行并再次手动输入。
答案 1 :(得分:0)
当你从命令行运行编译器执行(DOS我想...)时,必须指定java文件中涉及的每个类的完整路径,或者每个类都需要在同一个包中。这就是为什么当你调用javac时它无法找到Stack类。