OS X 10.9.1上的java“import java.util。*”编译失败

时间:2014-01-15 01:02:58

标签: java

我在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中的哪个类。导致问题?

谢谢!

2 个答案:

答案 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类。

相关问题