为什么通配符导入语句使用classpath jar类而不是jdk类?

时间:2012-07-12 17:26:54

标签: java java-io

最初我在类路径的jar中有一个java.io.File类,它没有separatorChar属性。所以我遇到了以下代码块运行的问题:

import java.io.File;

public class HelloWorld {

    public static void main(String[] args) { 
        System.out.println("separatorChar= " + File.separatorChar); 
    } 
}

但我更改了import语句如下:

import java.io.*;

然后我得到一个错误,基本上说明找不到File.separatorChar。

我认为正在发生的是import java.io. *正在使用类路径中的jar中的类,而import java.io.File则专门使用Java附带的File类。

这里的问题是为什么导入java.io.File工作而java.io. *不工作?

4 个答案:

答案 0 :(得分:1)

在一个空项目中,代码仍然使用import java.io.*进行编译,因此似乎使用了另一个类。如果您使用Eclipse,则可以检查File的工具提示以查看它是哪个类。

或者,您可以使用

System.out.println(File.class.toString())

将在运行时打印出类。

答案 1 :(得分:1)

正如EJP对原始问题发表评论,

  

这是正确的。导入java.io. *为编译器提供了另一个查找不在当前包中的类的位置。导入java.io.File告诉编译器使用哪个File。道德:不要重用JDK类名。

答案 2 :(得分:0)

你必须在别的地方弄乱别的东西。

编译时

import java.io.*;

public class HelloWorld {

    public static void main(String[] args) { 
        System.out.println("separatorChar= " + File.separatorChar); 
    } 
}

我得到了

c:\files\j>javac HelloWorld.java

c:\files\j>java HelloWorld
separatorChar= \

答案 3 :(得分:-1)

使用java.io. *;所有你看到的都是文件,所以代替File.seperatorChar,到达separatorChar的路由是io.file.separaterChar。它涉及起点。它就像一个文件系统......如果你在/ users / matt中你输入/documents/mytext.txt,那么完整的路径是C:/users/matt/documents/mytext.txt如果我退回给用户文件,然后相同的命令(/documents/mytext.txt)将查找不存在的C:/users/documents/mytext.txt。希望有所帮助。