studio - fecha de nacimiento en java
Comportamiento extraño con método principal. (3)
Tengo una clase como ...
public class Test{
public static void main(String[] args){
for(String s: args){
System.out.println(s);
}
}
}
Cuando ejecuté este programa como> java Test *
se imprimen los nombres de todos los archivos en esa carpeta.
No sé si JVM o Windows pasan esta matriz en lugar de ''*'', me gustaría saber si este programa se comporta igual en otras plataformas (que no sean Windows) y por qué se comporta de esta manera. ¿Hay algún propósito o razón para esto?
NOTA :
No rompe ninguno de mis códigos, pero tengo curiosidad.
Creo que la línea de comando, primero interpreta los operadores especiales antes de pasar al archivo java.
p.ej
java Test * > test.txt
java Test Test.????
java Test ^
Creo que no es específico de java.
Hasta hace poco (supongo que en Java 6) se agregó una nueva función a Java, donde "*" se traduce a todos los archivos en el directorio actual. Esto fue principalmente para evitar la necesidad de pasar rutas de clase largas y dar una forma independiente de plataforma para pasar todos los archivos jar en una carpeta a una ruta de clase.
java -cp "lib/*" <mainClass>
lib / * se traduciría a la lista de archivos separados por el separador de classpath para esa plataforma (es decir, para unix como y; para windows) pasados a la propiedad -cp.
Creo que esta podría ser la razón del comportamiento que ves. Asumí que era solo para especificar classpaths pero ahora creo que me equivoqué en ese momento.
Originalmente pensé que esto era solo el shell de la línea de comandos que realizaba la expansión del nombre de archivo. Eso es lo que esperaría en un sistema similar a Unix, pero no en Windows ... pero lo mismo ocurre para mí también en Windows.
No ocurre cuando escribo el código C # equivalente ... así que sospecho que es algo en el lanzador ejecutable de Java que lo está haciendo. (Tenga en cuenta que javaw.exe se comporta de la misma manera que java.exe.)
Ciertamente me sorprendió, y no creía que las versiones anteriores de Java hicieran esto en Windows, aunque esta publicación de la lista de correo de diciembre de 2000 sugiere que estoy equivocado. (Estoy usando un OpenJDK 1.7 JRE.)
No puedo encontrar ninguna descripción de este caso general en la documentación de Java para Windows ; menciona la expansión de las entradas de classpath, pero no los argumentos generales.