Arquitetura do Java

Java Runtime Environment (JRE)

Para que um programa em Java possa correr num computador este tem de ter instalado o Java Runtime Environment (JRE). Isto acontece porque, para garantir a portabilidade entre diferentes sistemas operativos, os programas em Java são executados através de uma máquina virtual, o Java Virtual Machine (JVM) que faz parte do JRE.

Para além da JVM, o JRE possui uma conjunto de bibliotecas essenciais ao bom desempenho da aplicação.

Java Virtual Machine (JVM)

O papel do JVM é garantir a portabilidade do Java entre diferentes sistemas.

De facto, quando uma aplicação em Java é compilada, a compilação não produz um ficheiro executável, como em C. Ela produz um código intermédio chamado bytecode. É este código intermédio que depois é interpretado, linha a linha, pela JVM e o programa é executado (ver figura acima).

De notar que existe uma JVM diferente para cada sistema operativo. Isto faz que uma aplicação em Java possa correr em diferentes sistemas operativos sem necessidade de recompilação, ao contrário do C, por exemplo.

Java Development Kit (JDK)

O Java Development Kit é um pacote essencial para desenvolver aplicações em Java. O JDK contém tudo o que é necessário para desenvolver programas em Java, o compilador, uma vasto conjunto de ferramentas para desenvolvimento, testes e correções de erros (debug), o JRE e as bibliotecas completa de classes Java, assim como bibliotecas adicionais.

Na figura podemos observar a estrutura da JDK.

Fases do desenvolvimento de um programa

Desde o desenvolvimento até à execução, um programa em Java passa por diferentes fases, como se pode ver na figura:

Através de um editor ou IDE, criamos o código fonte. O código fonte de um programa Java está organizado numa série de ficheiros chamados classes. Essa classes têm a extensão .java. Após compilação, para cada classe, é criada uma classe com o mesmo nome mas com a a extensão

.class que. Nos ficheiros .class está o bytecode do programa. Na execução, os ficheiros .class são lidos pelo interpretador integrado na JVM, traduzidos para código executável e executados.