主方法的奇怪行为

Pre*_*raj 23 java windows jvm

我有一个类 -

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

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

注意:
它不会破坏我的任何代码,但我只是好奇.

Jon*_*eet 15

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

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

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

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

  • 我认为他们在Windows系统上的java加载器中模拟`*`扩展,而通常的shell没有这样做. (4认同)