La mayoría de los sitios web en Internet por ejemplo:
"utilizar el
javac
comando para compilar un.java
archivo. A continuación, ejecute utilizando eljava
comando"
Pero hoy he tratado de ejecutar un programa Java sin javac
y me dieron un resultado extraño.
Estos son los contenidos de un archivo llamado hello.java
:
public class Myclass {
public static void main(String[] args){
System.out.println("hello world");
}
}
Entonces me encontré:
$ javac hello.java
Lo que me da este error:
hello.java:1: error: class Myclass is public, should be declared in a file named Myclass.java
public class Myclass {
^
1 error
Pero cuando lo ejecuto sin el javac
comando, se ejecuta sin errores.
$ java hello.java
hello world
¿El java
comando también compila el programa? Si es así, ¿por qué necesitamos el javac
comando?
La versión de mi java es:
openjdk version "12.0.2" 2019-07-16
OpenJDK Runtime Environment (build 12.0.2+10)
OpenJDK 64-Bit Server VM (build 12.0.2+10, mixed mode)
Antes de Java 11, para ejecutar el código debe compilar por primera vez, a continuación, se puede ejecutar. He aquí un ejemplo:
javac test.java
java test
Desde Java 11, todavía se puede hacer javac
+ java
, o puede ejecutar java
por sí mismo para compilar y ejecutar automáticamente el código. Tenga en cuenta que ningún .class
archivo se generará. He aquí un ejemplo:
java test.java
Si se ejecuta java -help
, podrá ver los distintos usos permitidos. Esto es lo que parece que en mi máquina. El último es lo que se ejecutó en: java [options] <sourcefile> [args]
que "ejecutar un programa único archivo de origen".
$ java -help
Usage: java [options] <mainclass> [args...]
(to execute a class)
or java [options] -jar <jarfile> [args...]
(to execute a jar file)
or java [options] -m <module>[/<mainclass>] [args...]
java [options] --module <module>[/<mainclass>] [args...]
(to execute the main class in a module)
or java [options] <sourcefile> [args]
(to execute a single source-file program)
ACTUALIZAR:
Como ha señalado @BillK, OP también preguntó:
¿por qué necesitamos el comando javac?
La razón por la que necesitamos javac
es crear .class
archivos de modo que se puede crear código, prueba, distribuir, ejecutar, compartir, etc., como lo es hoy. La motivación para la PEC 330 fue para que sea más fácil para "primeras etapas de aprendizaje de Java, y al escribir programas utilitarios pequeños" sin cambiar otros usos existentes.