Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么通配符导入语句使用classpath jar类而不是jdk类?_Java_Java Io - Fatal编程技术网

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

Java 为什么通配符导入语句使用classpath jar类而不是jdk类?,java,java-io,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); } } 但我将进口声明更

最初,我在类路径的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.*无效?

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

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

你一定是在什么地方把别的事情搞砸了

当我编译

import java.io.*;

public class HelloWorld {

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


你一定是在什么地方把事情搞砸了

当我编译

import java.io.*;

public class HelloWorld {

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


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

或者,您可以使用

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

它将在运行时打印出类。

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

或者,您可以使用

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

它将在运行时打印出类。

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


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


正如EJP对原始问题的评论


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



有没有办法查看在无头环境中使用了哪个类?当然有:写入文件。感谢@felix freiberger,这验证了我的假设,即肯定存在另一个类。我更新了我的问题,使之更加具体,并提供了更多细节。有没有办法查看在无头环境中使用的类?当然有:写入文件。感谢@felix freiberger,这验证了我的假设,即必须存在另一个类。我更新了我的问题,使之更加具体,并提供了更多的细节。
io.File.separatorChar
将不起作用。答案完全不正确。对不起,这并不是一个完整的答案,而是对发生的事情的解释。你永远不可能比你现在的位置低1级,但这并没有传达出你的想法,即使传达了,这也不是答案。问题完全不同。*打开另一个包作用域进行搜索:File+将编译器定向到特定包作用域中的特定类。
io.File.separatorChar
将不起作用。答案完全不正确。对不起,这并不是一个完整的答案,而是对发生的事情的解释。你永远不可能比你现在的位置低1级,但这并没有传达出你的想法,即使传达了,这也不是答案。问题完全不同。*打开另一个包作用域进行搜索:File+将编译器指向特定包作用域中的特定类。当前包中必须有另一个名为File的类。@EJP,这似乎是问题所在。JVM搜索类的方式肯定有一些细微的差别,因为使用import java.io.File时使用的是正确的类,而import java.io.*时使用的是不同的类。这是正确的。Import java.io.*为编译器提供了另一个查找不在当前包中的类的位置。Import java.io.File告诉编译器要使用哪个文件。寓意:不要重用JDK类名。当前包中必须有另一个名为File的类。@EJP,这似乎就是问题所在。JVM搜索类的方式肯定有一些细微的差别,因为使用import java.io.File时使用的是正确的类,而import java.io.*时使用的是不同的类。这是正确的。Import java.io.*为编译器提供了另一个查找不在当前包中的类的位置。Import java.io.File告诉编译器要使用哪个文件。寓意:不要重用JDK类名。