Livro java
Em Java, as coisas mudam novamente. Um programa Java não é compilado para um código nativo como é feito em um programa C. Quando compilamos um arquivo .java (que é a extensão de um programa Java, assim como .c é a extensão de um programa C) geramos um código intermediário, chamado bytecode que fica em um aquivo .class. Um arquivo .java contém o código fonte, que depois de compilado vira um arquivo .class. Esse arquivo .classcontém instruções chamadas de bytecodes. Esses bytecodes são um código intermediário e não servem para ser executados por nenhum sistema operacional, não é um código nativo.
1.2A máquina virtual
Os bytecodes não servem para ser executados por nenhum sistema operacional. Ao invés de executar os bytecodes diretamente, precisaremos de um programa, que leia cada bytecode e traduza para um código nativo. Assim podemos executar nosso programa Java. Esse programa que faz a tradução dos bytecodes e envia código nativo para o sistema executar é a máquina virtual, conhecida também como JVM (Java Virtual Machine). A máquina virtual é um programa, e vimos que um programa é especifico para determinado sistema operacional. Logo, existe uma máquina virtual para o windows que traduzirá os bytecodes para códigos nativos de windows, outra máquina virtual para linux que traduzirá os bytecodes para código nativo de linux, e assim por diante. No windows o programa da máquina virtual é o java.exe, e ele recebe como parâmetro quais arquivos .class devem ser executados. Lembrando que dentro dos arquivos .class existem os bytecodes.
1.3Linguagem Orientada a Objetos
A linguagem Java é orientada a objetos. Cada classe Java está em um arquivo .java (geralmente) e cada arquivo.java é compilado e vira um .class. Para cada classe temos um .class então. Numa aplicação teremos centenas de arquivos .java e .class. Podemos agrupar um conjunto de arquivos .class em um arquivo .jar, um arquivo JAR (Java Archive) nada mais é um