繁体   English   中英

主方法的奇怪行为

[英]Weird behavior with main method

我有一个类 -

public class Test{
    public static void main(String[] args){
        for(String s: args){
            System.out.println(s);
        }
    }
}

当我像> java Test *一样运行这个程序时,它会打印该文件夹中所有文件的名称。
我不知道JVM或Windows是否通过这个数组而不是'*',我想知道这个程序在其他平台上是否表现相同(除了windows)以及它为什么会以这种方式运行? 这有什么目的或原因吗?

注意
它没有破坏我的任何代码,但我只是好奇。

我原本以为这只是执行文件名扩展的命令行shell。 这就是我在类Unix系统中所期望的,但不是Windows ......但在Windows下也是如此。

当我编写等效的C#代码时,它不会发生......所以我怀疑它是Java可执行启动程序中的一部分。 (请注意,javaw.exe的行为与java.exe相同。)

这当然让我感到意外,我不认为 Java的旧版本在Windows上做到这一点,尽管从2000年12月开始的这个邮件列表表明我错了。 (我使用的是OpenJDK 1.7 JRE。)

我在Java Windows文档中找不到这种一般情况的任何描述 - 它提到了类路径条目的扩展,但没有提到一般参数。

直到最近(我猜在Java 6中),Java中添加了一个新功能,其中'*'被转换为当前目录中的所有文件。 这主要是为了避免需要传递长类路径并提供一种独立于平台的方式将文件夹中的所有jar文件传递给类路径。

java -cp "lib/*" <mainClass>

lib / *将被转换为由该平台的类路径分隔符分隔的文件列表(即:对于unix like和; for windows)传递给-cp属性。

我认为这可能是你看到的行为的原因。 我认为它只是用于指定类路径,但现在我认为我错了。

我想命令行,首先在传递给java文件之前解释特殊操作符。

例如

java Test * > test.txt

java Test Test.????
java Test ^

我认为它不是特定于java。

暂无
暂无

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

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