爪哇语;导入java.util.*";OS X 10.9.1上的编译失败

爪哇语;导入java.util.*";OS X 10.9.1上的编译失败,java,Java,我写了一个关于java堆栈操作的非常简单的程序。我正在使用Java(TM)SE运行时环境和OS X 10.9.1。我尝试过JDK build 1.7.0_13-b20和build 1.7.0_51-b13,这两种版本对我都不起作用。我只是想测试java堆栈类。我没有私有堆栈实现。并且$CLASSPATH环境变量被设置为空 我用JDK1.7.0_25在Windows(Win8.1)上测试了相同的程序。它工作得很好 import java.util.*; public class MyStackTe

我写了一个关于java堆栈操作的非常简单的程序。我正在使用Java(TM)SE运行时环境和OS X 10.9.1。我尝试过JDK build 1.7.0_13-b20和build 1.7.0_51-b13,这两种版本对我都不起作用。我只是想测试java堆栈类。我没有私有堆栈实现。并且$CLASSPATH环境变量被设置为空

我用JDK1.7.0_25在Windows(Win8.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();
        }
    }
 }
这个程序编译得很好。为什么“import java.util.”会导致这个问题?如何判断java.util中的哪个类。问题出在哪里


谢谢

当您从命令行(我猜是DOS…)运行编译器执行时,必须指定到java文件中涉及的每个类的完整路径,或者每个类都需要在同一个包中。这就是为什么调用javac时,它找不到堆栈类。

您可能在与
MyStackTest
类相同的包中有一个
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());
    }
}
import java.util.*;
公共类测试
{
公共静态void main(字符串[]args){
Stack mys=新堆栈();
System.out.println(mys.getClass());
}
}

另一种可能是在
mys.empty()
中有非UTF8字符。请尝试删除该行并再次手动键入。

我可以用1.7.0_51-b13编译它。您是否定义了自己的
堆栈
类?这两个导入之间存在细微差异(关于如何处理导入的类),但我记不起它是什么。(这似乎不适用于本例。)@arshajii我复制了上述源代码,它编译并运行良好。然后我创建了自己的堆栈类,并收到了类似的编译器错误。然后我将import语句更改为
import java.util.Stack
,它再次编译并运行良好。我使用了1.7.0_25。@yuyang没有自定义的
堆栈
类,无论使用哪个import语句,这段代码都能很好地编译和运行。你确定你的类路径中没有自己的
堆栈
类,甚至没有一些旧的
堆栈.class
文件吗?标题表示Mac OS X 10.9.1,而不是DOS。
import 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());
    }
}