Java: Compilação de classes Java

Iremos tratar o assunto sobre a compilação de classes Java em duas partes: Compilação de um programa e Compilação de classes Java

Fala, pessoal! Beleza?

Iremos tratar o assunto sobre a compilação de classes Java em duas partes:

  • Compilação de um programa; e
  • Compilação de classes Java.

Compilação de um programa

No nosso dia a dia, utilizamos programas de computadores para os mais diversos fins, seja para nos auxiliar em nosso trabalho, seja para usos pessoais.

Podemos dizer que um programa de computador é um conjunto de instruções que:

  • Possui um determinado fim, por exemplo, o Photoshop para edição de imagens; e
  • É executado por um processador.

Mas para haja essa execução pelo processador, o programa precisa estar em uma linguagem que o processador possa entender: a linguagem de máquina. Ela é composta apenas de 0 e 1.

Mas como vamos programar escrevendo apenas 0 e 1?

Não precisamos ter conhecimento de linguagem de máquina para escrever nossos programas. Para nosso trabalho como desenvolvedores de software, utilizamos linguagens de alto nível, como, por exemplo, a própria linguagem Java.

Bom, pessoal, programar já não é uma tarefa tão fácil e programar escovando bits, quase impossível humanamente!

Apenas para entendermos:

  • Quanto mais semelhante uma linguagem for da de máquina:
    • Mais baixo é o nível dessa linguagem; e
    • Menos legível é para o ser humano;
  • Quanto mais “distante” uma linguagem for da de máquina:
    • Mais alto é o nível dessa linguagem; e
    • Mais legível é para o ser humano.

Se o processador apenas reconhece a linguagem de máquina, como ele irá executar um programa escrito em uma linguagem de alto nível?

Perfeito. Neste momento, entram em ação dois cabocos:

  • Compilador; e
  • Editor de ligação.

Então o processo de compilação é o seguinte:

  • Há um programa-fonte em linguagem de alto nível;
  • Ele compilado e então gerado um programa-objeto em linguagem de máquina;
    • Porém ainda não executável;
  • O editor de ligação por sua vez:
    • Recebe esse programa-objeto; e
    • Transforma-o em um programa em linguagem de máquina executável para uma plataforma específica;
  • Como uma linguagem de máquina de uma plataforma às vezes difere de outra, precisaremos de um compilador e de um editor de ligação específicos para que um programa-fonte possa ser traduzido em na linguagem de máquina própria de uma plataforma.

É assim também quando utilizando a tecnologia Java?

Não. A linguagem Java possui várias características-chave e uma delas é justamente a portabilidade. Como o Java oferece isso? É o que vamos ver na parte II do artigo.

[FGV 2010 DENTRAN/RN – Programador – Questão 24] As etapas realizadas durante a programação em uma  linguagem de alto nível, para se gerar um código executável, são:

[A] Programa fonte, compilação, interpretação, ligação, código executável.

[B] Programa fonte, compilação, código-objeto, ligação, código executável.

[C] Programa fonte, interpretação, código-objeto, ligação, código executável.

[D] Programa fonte, montagem, compilação, código-objeto, código executável.

[E] Programa fonte, montagem, código-objeto, ligação, interpretação.

Comentários:

Como vimos na teoria, temos:

  • Programa fonte em linguagem de alto nível;
  • Compilamos o programa fonte;
  • O programa-fonte é transformado em código-objeto;
  • O editor de ligação gera, a partir de um código-objeto ou mais, um código executável.

Gabarito: letra B.

[FCC 2014 SABESP – Tecnólogo – Sistemas] Analise as afirmativas sobre métodos de implementação de linguagens de programação:

[I] No processo de interpretação, a instrução é traduzida e executada no momento da execução do programa. Uma vantagem é que apenas partes do programa podem ser executados, mas há desvantagens: o processo é mais lento em relação ao processo de compilação e pode haver maior consumo de memória.

Gabarito: CERTO.

[III] O processo de compilação efetua a tradução integral do código fonte para o código de máquina. A execução é mais rápida porque não é necessário fazer nenhuma tradução intermediária. Para que o programa seja executado é necessário apenas o código executável. A vantagem é a total portabilidade do código executável, que pode ser executado em qualquer sistema operacional.

Comentários:

Como uma linguagem de máquina de uma plataforma às vezes difere de outra, precisaremos de um compilador e de um editor de ligação específicos para que um programa-fonte possa ser traduzido em na linguagem de máquina própria de uma plataforma.

Ou seja, a desvantagem é a não portabilidade do código executável, que não pode ser executado em qualquer sistema operacional

Gabarito: ERRADO.

Compilação de classes Java

Na tecnologia Java, temos três entidades:

  • JDK;
  • JRE; e
  • JVM.

Resumidamente:

  • Fase de compilação:
    • Compilamos as classes Java (arquivos de extensão .java) com um compilador que vem junto com um JDK (kit de desenvolvimento Java);
    • As classes então são transformadas em bytecode (arquivos de extensão .class) pelo compilador;
      • Importante dizer que o bytecode é único, ou seja, não está em linguagem de máquina específica de uma plataforma;
  • Fase de interpretação e execução:
    • No cliente, onde a aplicação irá rodar, temos um JRE (o ambiente de execução Java) para o tipo de plataforma do cliente;
    • Junto com o JRE vem a JVMV (máquina virtual Java);
      • Ela interpretará e executará o bytecode;
    • Para cada plataforma onde iremos rodar a aplicação, haverá uma dupla JRE e JVM.

Não precisamos recompilar a aplicação para que possamos rodá-la em plataformas diferentes. Compilamos uma vez as classes para termos um único conjunto de bytecode e cada JVM para uma plataforma saberá interpretar e executar esse conjunto na plataforma específica.

Assim, meus amigos, a tecnologia Java nos oferece a portabilidade! Escreva sua aplicação apenas uma vez e execute-a em qualquer lugar!

O JRE (ambiente de execução) Java possui:

  • A JVM; e
  • API;
    • Java Application Programming Interface;
    • É uma biblioteca de componentes que:
      • Possui vários recursos úteis; e
      • É utilizada para execução de aplicações Java.

É necessário instalar um JRE específico de uma plataforma, pois junto com ele vem uma JVM que:

  • Saberá lidar com essa plataforma; e
  • Conseguirá executar aplicações Java naquele ambiente.

Visualmente, temos:

  • Na camada mais baixa, temos o hardware;
  • Na camada mais acima, temos o JRE;
    • Junto com ele, vem a JVM e a API Java; e
  • Na camada mais acima, temos a aplicação Java.

A máquina virtual Java é o coração de toda essa ideia de portabilidade. Ela é responsável por interpretar e executar o bytecode. É a provedora de formas e meios de o aplicativo conversar com o sistema operacional.

[Quadrix 2017 CFO/DF – Analista de Desenvolvimento de Sistema de Informação]

A partir do código acima, escrito na linguagem de implementação Java, julgue o próximo item.

O método com a assinatura public static void main (String[] args){ } é responsável por caracterizar a classe como uma aplicação que a Máquina Virtual Java (JVM) deverá interpretar no momento da execução do programa.

Gabarito: CERTO.

[Quadrix 2013 CRQ 4ª Região-SP – Analista de Sistemas – Programação] Portabilidade é a característica que fez do JAVA uma linguagem muito utilizada. Atualmente o número de aplicações em dispositivos móveis tem crescido na mesma proporção do uso do JAVA.

A tecnologia ou software que garante essa portabilidade é:

[A] JLE – Java Lost Environment.

[B] JME – Java Micro Edition.

[C] JSE – Java Standard Edition.

[D] JVM – Java Virtual Machine.

[E] JSP – Java Server Pages.

Gabarito: letra D.

[IBFC 2016 EBSERH – Analista de Tecnologia da Informação – Suporte de Rede (HUAP-UFF)] A Máquina Virtual que carrega e executa os aplicativos Java, convertendo os bytecodes em código executável de máquina, é conhecida pela sigla em inglês:

[A] SDK

[B] JDK

[C] QEMU

[D] JVM

[E] JRE

Gabarito: letra D.

[FGV 2018 Banestes – Analista em Tecnologia da Informação – Suporte e Infraestrutura] Considere a compilação de um ou mais programas por meio da linha de comando, num ambiente Java. Nesse caso, o comando que está corretamente formado para esse fim é:

[A] compile teste.java –type java

[B] java teste.java

[C] javac *.java

[D] jvm Teste1.java teste2.java

[E] parse java teste.java

Gabarito: letra C.

[FGV 2012 Senado Federal – Prova anulada – Análise de Sistemas – Questão 55] Observe a figura abaixo, associada à linguagem Java.

Para permitir que um mesmo programa seja executado em vários sistemas operacionais, a plataforma java gera códigos genéricos *.class e os traduz para o código da máquina local, *.exe ou *.bin, somente no momento da execução. Nesse contexto, os códigos específicos para a máquina virtual Java, e não para a máquina local, recebe o nome de:

[A] microcode.

[B] scriptcode.

[C] framecode.

[D] bytecode.

[E] javacode.

Gabarito: letra D.

[FCC 2010 TRT 9ª Região – Técnico Judiciário – Especialidade Tecnologia da Informação – Questão 36] O JVM mais o núcleo de classes da plataforma Java e os arquivos de suporte formam o

[A] o J2EE.

[B] o JDK.

[C] o JRE.

[D] uma JSP.

[E] uma API.

Gabarito: letra C.

[FCC 2007 TJ/PE – Analista Judiciário – Analista de Suporte – Questão 25] O código Java compilado é gerado em arquivo com extensão

[A] .ser

[B] .jar

[C] .java

[D] .html

[E] .class

Gabarito: letra E.

Então é isso! Abraços e até a próxima!

Rogério Araújo – Trabalha na Secretaria do Tesouro Nacional/Ministério da Fazenda, exercendo o cargo de Auditor Federal de Finanças e Controle. Formado em Bacharelado em Ciência da Computação pela UESPI (Universidade Estadual do Piauí) e especialista em Governança em TI pela Unieuro e em Desenvolvimento de Sistemas Baseados em Software Livre pela UNAMA (Universidade da Amazônia). Possui as certificações COBIT 4.1 Foundation Certified e SCJA (Sun Certified Associate for J2SE). É autor de artigos no site www.rogeraoaraujo.com.br e professor de cursos na área de Desenvolvimento de Sistemas para concursos. Foi aprovado em alguns concursos, tais como, em ordem decrescente de ano, STN 2013 (nomeado e onde estou hoje), TST 2012 (nomeado), TSE 2012 (aproveitado e nomeado no TRF 1ª Região), TRE/PE 2011 (classificado), TRT 19ª Região 2011 (classificado), MPU 2010 (classificado), STM 2010 (classificado), SERPRO 2008 (nomeado), TRT 18ª Região 2008 (classificado), MPU 2006 (classificado), BACEN 2005 (classificado), TRE/MA 2005 (classificado), TRT 16ª Região 2005 (classificado), TCE/PI 2005 (classificado) e MPU 2004 (nomeado).

WHATSAPP GCO: receba gratuitamente notícias de concursos! Clique AQUI!

CONCURSOS ABERTOS: veja aqui os editais publicados e garanta a sua vaga!

CONCURSOS 2019: clique aqui e confira as oportunidades para este ano!

Estudando para concursos públicos? Prepare-se com quem mais entende do assunto! Cursos completos 2 em 1, professores especialistas e um banco com mais de 920.000 questões de prova! Garanta já a sua vaga! Mude de vida em 2019!

Estude onde, quando, como quiser e em até 12x sem juros! Teste agora por 30 dias!

Matricule-se!

Quer conquistar a sua aprovação em concursos públicos?
Prepare-se com quem mais entende do assunto!
COMECE A ESTUDAR NO GRAN
Rogério Araújo
Rogério Araújo
Auditor Federal do STN, especialista em Governança em TI e professor de Desenvolvimento de Sistemas
2 Comentários

2 Comentários

  1. Samir

    02/03/2020 16:37em16:37

    gabarito da questão FGV 2018 Banestes está errado é letra c) javac *.java

Deixe seu comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Quer conquistar a sua aprovação em concursos públicos?
Prepare-se com quem mais entende do assunto!
COMECE A ESTUDAR NO GRAN
Assinatura Ilimitada
Para o Topo