2009-11-04 14 views
15

Entiendo que String [] args es una matriz de cadenas pasadas a main como parámetros.¿Por qué es necesario String [] args en Java?

java Print "Hello, World!" 

 

class Print { 
    public static void main(String[] args) { 
    System.out.println(args[0]); 
    } 
} 

Sin embargo, cuando no es necesario incluirla como parámetro (incluso si no se utiliza), se produce una excepción. Entonces, ¿por qué es requerido? Además, ¿por qué no puede ser un int [] o booleano []?

Respuesta

31

Es una cadena porque la línea de comando se expresa en texto. Si desea convertir ese texto en enteros o booleanos, debe hacerlo usted mismo: ¿cómo sabría el sistema operativo o el programa de arranque de Java exactamente cómo quería que se analizara todo? Supongo que Java podría buscar un método principal con el mismo número de parámetros que los argumentos de la línea de comando, y luego intentar analizarlos usando Integer.parseInt etc ... pero esto sería bastante complicado, y aún sería inadecuado en muchas situaciones.

En cuanto a que sea obligatorio, básicamente los diseñadores de Java decidieron apegarse a una única firma de método, que es francamente más simple que permitir que sea opcional. Sería posible, aunque - en C#, se puede tener cualquiera de

static void Main() 
static void Main(string[] args) 
static int Main() 
static int Main(string[] args) 

En última instancia, no hace mucha diferencia, para ser honesto. No hay desventajas significativas al tener que incluir el parámetro.

+0

Oi, ¿por qué cambia el nombre? – paxdiablo

+0

+1 - no hace ninguna diferencia. Muévete, no pasa nada aquí :-) –

+0

@paxdiablo: Un poco divertido debido a mi charla en DevDays, eso es todo. Revertirá en unos días o una semana. –

4

El sistema de tiempo de ejecución de Java busca específicamente un método con un solo parámetro de tipo String[], porque quiere pasar los parámetros a su método main. Si tal método no está presente, le informa a través de una excepción.

Si desea tratar los parámetros de la línea de comando (cadena) como enteros o booleanos, se espera que realice la conversión usted mismo. Esto le permite manejar la condición en la que alguien ingresa "ponies" donde espera un número entero.

+0

¿Por qué? Si conoce la razón, dígame aquí: http: //stackoverflow.com/questions/33454612/significance-of-string-args-while-writing-main – abhishah901

2

Así se diseñó el lenguaje. C y C++ lo hacen de forma similar, aunque con un conteo separado, información que se incluye en el conjunto de cadenas para Java.

Usted podría haberlo diseñado para tomar enteros o booleanos, pero eso habría agregado más trabajo al tiempo de ejecución de Java para el beneficio potencialmente pequeño.

Las cadenas se pueden utilizar para transmitir cualquier tipo de información en el programa principal (incluidos enteros y booleanos). No es así para los enteros si quiere pasar una cadena (excepto que el usuario tenga que codificarla manualmente como UTF-8 o algo así, algo que no haría que la gente se hiciera con el lenguaje).

Solo recuerda declararlo. Por supuesto, plantee una solicitud de cambio en el idioma si lo desea (para hacerlo opcional, o permitir otras firmas) pero sospecho que no llegará muy lejos.

-1

Porque el código que ejecuta su función main() está buscando específicamente esa firma. Piense que tiene, en algún lugar:

YourClass.main(new String[] { ... }); 

Obviamente, si main toma algo más, esto no funcionará.

0

Es una convención.El método lo usa el intérprete de línea de comandos y así es como lo espera. Además, el compilador también espera la firma en este formulario particular y no compilará si omite el parámetro, por ejemplo

+0

¿Por qué? Si conoce la razón, dígame aquí: http://stackoverflow.com/questions/33454612/significance-of-string-args-while-writing-main – abhishah901

+0

El intérprete * espera la firma. Sin compilador – abhishah901

0

El parámetro string [] se usa para guardar los argumentos de la línea de comando siendo el nombre de la clase primero. Además, si llama a su método principal sin cadena [] simplemente será una sobrecarga y JVM no llamará a ese método. Y si omite este método principal de firma, JVM emitirá una excepción

+0

El primer argumento de línea de comando no es el nombre de clase en Java. Si no estamos pasando ningún argumento de línea de comando, es decir, simplemente diciendo java yourClassName, esto no pondrá className en la matriz String. En C/C++, el nombre de archivo ejecutable es el primer argumento. – Vivek

Cuestiones relacionadas