Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Por que funciona?

Eu estou no curso de polimorfismo, aí fui testar um negócio:

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!"); 
    }
}

Fiz esse código rápidinho Se você colocar no prompt de comando: javac HelloWorld.java e depois: java HelloWorld Funciona, criando um arquivo .class, que está sendo executado pelo JVM

Mas se fizermos: java HelloWorld.java Funciona, mas não cria um arquivo .class, ele está usando o JVM? Era para ele funcionar? Se ele funciona, por que devemos criar o arquivo .class?

E só por curiosidade, para que serve o arquivo .class?

Se alguém me responder, eu vou agradecer demais.

2 respostas
solução!

O arquivo ".class" é o que chamamos de bytecode, ou seja, é o seu código compilado. Não vou mentir, não sei os detalhes em específico da resposta, mas posso imaginar o motivo.

De forma semelhante, em python, outra linguagem de programação, as vezes, quando rodamos o código, geramos arquivos ".pyc" que são código compilado de python na linguagem C.

A vantagem do código compilado é que ele roda naturalmente mais rápido que qualquer código interpretado, e o python em questão faz isso na sua primeira execução para que quaisquer outras vezes que você for rodar o código, o código compilado rode e o desempenho seja melhor.

No seu caso, eu imagino que a chamada de "java HelloWorld.java" fez a compilação do código em tempo-real por debaixo dos panos, e você somente não percebeu isso. O comando "javac" é usado especificamente para compilar código. O comando "java" para rodar aplicações java. Muito provavelmente, caso na hora de rodar essa aplicação o código não esteja compilado, o comando em si deve chamar o javac, criar o bytecode e rodar. O ".class" não apareceu porque foi descartado ao fim da execução.

Se esse é realmente o caso, o uso do javac é imprescindível. Se você tiver que compilar seu código a cada execução, mesmo sem mudanças no código em si, o tempo que isso poderia levar, principalmente em caso de códigos grandes, que podem levar horas para compilar, seria insuportável.

Muito Obrigado!!!