繁体   English   中英

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

[英]Why do wildcard import statements use classpath jar class instead of jdk classes?

最初,我在类路径的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 java.io.*;

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

我相信正在发生的事情是import java.io. *使用的是类路径中jar中的类,而import java.io.File具体使用的是Java随附的File类。

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

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

或者,您可以使用

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

这将在运行时打印出该类。

正如EJP对原始问题的评论一样,

那是对的。 Import java.io. *为编译器提供了另一个查找当前程序包中没有的类的地方。 Import java.io.File告诉编译器要使用哪个文件。 道德:不要重用JDK类名。

您一定在某处弄乱了其他东西。

当我编译

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= \

当您使用java.io. *时; 您所看到的只是文件,因此,到达File.seperatorChar的路由不是io.file.separaterChar,而是File.seperatorChar。 它涉及起点。 这就像一个文件系统...如果您在/ users / matt中,然后键入/documents/mytext.txt,则完整路径为C:/users/matt/documents/mytext.txt如果我退回到用户文件,然后使用同一命令(/documents/mytext.txt)查找不存在的C:/users/documents/mytext.txt。 希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM