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!
[su_button url=”https://www.grancursosonline.com.br/assinatura-ilimitada” target=”blank” style=”flat” background=”#ff0000″ size=”7″ icon=”icon: shopping-cart”]Matricule-se![/su_button]
gabarito da questão FGV 2018 Banestes está errado é letra c) javac *.java
Obrigado, Samir.