Postado em

na

Linguagem de programação Java

Nesse post veremos uma introdução a linguagem de programação java. O Java é uma linguagem de programação concorrente, orientada a objetos, e destinada a permitir que desenvolvedores de aplicativos “escrevam uma vez, executem em qualquer lugar” (WORA). Consideramos que Java é uma linguagem rápida, quase tão rápida quanto linguagens como C e Rust, mas consome muita memória em comparação com essas linguagens.

linguagem de programação Java

O que é a Linguagem de programação Java

Java é uma linguagem de programação de computador de propósito geral que é concorrente, baseada em classes, orientada a objetos e projetada especificamente para ter o menor número possível de dependências de implementação. Destinamos que os desenvolvedores de aplicativos possam “escrever uma vez, executar em qualquer lugar” (WORA), isso significa que o código Java compilado consegue executar em todas as plataformas em que há suporte Java, sem a necessidade de recompilação.

Por exemplo, podemos escrever e compilar um programa Java no UNIX e executá-lo no Microsoft Windows, Macintosh ou em máquinas UNIX sem modificações no código-fonte.

Alcançamos o WORA compilando um programa Java em uma linguagem intermediária chamada bytecode. O formato do bytecode é independente da plataforma. Usamos uma máquina virtual, chamada Máquina Virtual Java (JVM), para executar o bytecode em cada plataforma.

JDK vs JRE vs JVM

História do Java

James Gosling desenvolveu originalmente o Java na Sun Microsystems (comprado pela Oracle Corporation) e o lançou em 1995 como um componente central da plataforma Java da Sun Microsystems. A linguagem deriva grande parte de sua sintaxe de C e C++, mas tem menos facilidades de baixo nível do que qualquer uma delas.

Os designers projetaram a linguagem de programação Java para ser uma linguagem de programação independente de máquina poderosa o suficiente para substituir o código executável nativo. Inicialmente começou com Applets (Os desenvolvedores incorporaram Applets como componentes em uma página da web.), Hoje, as pessoas mais usam Java como a plataforma para aplicativos baseados na web e serviços da web. Hoje, uma ramificação da plataforma Java é a base para o sistema operacional Android do Google, que alimenta bilhões de telefones e outros dispositivos móveis.

A Oracle Corporation é a proprietária atual da implementação oficial da plataforma Java SE, após sua aquisição da Sun Microsystems em 27 de janeiro de 2010. A implementação se baseia na implementação original do Java pela Sun. A implementação da Oracle está disponível para Microsoft Windows, Mac OS X, Linux e Solaris.

A Oracle empacota sua implementação em duas distribuições diferentes:

  • Ambiente de Execução Java (JRE), que contém as partes da plataforma Java SE necessárias para executar programas Java e cujo destino são usuários finais.
  • Kit de Desenvolvimento Java (JDK), esse pacote destina-se a desenvolvedores de software e inclui ferramentas de desenvolvimento como o compilador Java, Javadoc, Jar e um depurador. Podemos ler sobre todos os lançamentos anteriores do Java e suas características no post vinculado.

Máquina Virtual Java

No núcleo do ecossistema Java está a Máquina Virtual Java (JVM). Quando compilamos um programa Java, o compilador transforma o código-fonte Java em instruções binárias simples, muito parecidas com o código de máquina ordinário de um microprocessador. No entanto, enquanto os compiladores convertem o código-fonte C ou C++ em instruções nativas para um modelo de processador específico, o compilador Java transforma o código-fonte em um formato universal. A máquina virtual utiliza essas instruções compiladas, conhecidas como bytecode, para executar o código utilizando o interpretador de tempo de execução Java.

O sistema de tempo de execução executa todas as atividades normais de um processador de hardware. Ele executa um conjunto de instruções baseadas em pilha e gerencia a memória como um sistema operacional de acordo com uma especificação aberta estritamente definida para produzir uma máquina virtual compatível com Java. Por exemplo, o Java especifica os tamanhos e as propriedades matemáticas de todos os seus tipos de dados primitivos em vez de deixá-los para a implementação da plataforma.

Além de compilar o código-fonte para bytecode portátil, o Java otimiza ainda mais seu desempenho compilando o bytecode para código de máquina nativo na hora usando a compilação JIT (Just-in-Time).

O Java também suporta a compilação adaptativa. Por exemplo, a JVM HotSpot começa como um interpretador de bytecode Java normal, mas também perfila quais partes do programa estão sendo executadas repetidamente. Uma vez que ele sabe, o HotSpot compila essas seções em código de máquina nativo ótimo.

Gerenciamento Automático de Memória

O Java usa um coletor de lixo automático para gerenciar a memória no ciclo de vida do objeto. Além disso, o programador determina quando os objetos são criados, e o tempo de execução Java é responsável por recuperar a memória uma vez que os objetos não são mais usados. Quando não houver mais referências a um objeto, o coletor de lixo automaticamente libera a memória inacessível.

Além disso, se o código do programador mantiver uma referência a um objeto que não é mais necessário, algo semelhante a um vazamento de memória ainda pode ocorrer, especialmente quando objetos não mais necessários são armazenados em contêineres que ainda estão em uso. Em tal situação, se métodos para um objeto inexistente forem chamados, o sistema lançará uma “NullPointerException”.

A coleta de lixo pode acontecer a qualquer momento. Idealmente, ela ocorrerá quando um programa estiver inativo. Ela é garantida para ser acionada se houver memória livre insuficiente no heap para alocar um novo objeto. Isso pode fazer com que um programa pare momentaneamente. O gerenciamento explícito de memória não é possível no Java.

Programa Olá Mundo

O tradicional programa “Olá, mundo!” pode ser escrito em Java da seguinte forma. O arquivo fonte Java deve ser nomeado de acordo com a classe pública que ele contém, adicionando o sufixo .java, por exemplo, Application.java.

Application.java public class Application {

public static void main(String[] args) {
System.out.println("Hello World!"); // Imprime Olá Mundo! no console.
}

Um compilador Java deve primeiro compilar o arquivo fonte em bytecode, produzindo um arquivo nomeado Application.class. Somente após essa etapa, o programa pode ser executado ou “lançado”.

$ javac Application.java

O ponto de entrada para qualquer programa Java é o método main(). Para executar o método main(), use o comando java com o nome da classe.

$ java Application.class

O programa acima executará a instrução de impressão e a mensagem de “olá mundo” será impressa no console.

Recursos do Java

O Java possui vários recursos. Alguns destes são exclusivos do Java, e alguns são comuns entre outras linguagens.

  • Orientado a Objetos – Em Java, representamos tudo como objetos. Um objeto é uma espécie de invólucro que encapsula dados e seu comportamento associado. O Java suporta todos os principais princípios orientados a objetos, como visto em outras linguagens orientadas a objetos.
  • Plataforma Independente – O compilador Java converte os programas escritos em Java em bytecode. Qualquer máquina que tenha um ambiente de execução Java (JRE) pode executar este bytecode. Isso torna os aplicativos Java independentes de plataforma. Nos aplicativos C ou C++, compilam os programas em binários específicos do sistema operacional, diferentemente do Java.
  • Segurança – No ambiente de Java (JRE), executam os aplicativos Java com quase nenhuma interação com o sistema operacional. Isso torna o Java mais seguro do que outras linguagens.
  • Multithreaded – O Java suporta a escrita de aplicativos que podem realizar várias tarefas em threads separados. Todas as tarefas progridem usando a técnica de fatiamento de tempo das threads do sistema operacional. Por exemplo, um aplicativo Java serve como um formulário de login do usuário enquanto executa processos em segundo plano.
  • Alto Desempenho – O Java é uma linguagem interpretada, nunca será tão rápida como uma linguagem compilada como C ou C++. Mas, o Java permite alto desempenho com o uso de um compilador just-in-time.
  • Arquitetura Neutra de SO – O compilador Java gera um arquivo de classe ou bytecode neutro de arquitetura de SO. Por exemplo, na programação C, o tipo de dado int ocupa 2 bytes de memória para arquiteturas de 32 bits e 4 bytes de memória para arquiteturas de 64 bits. No entanto, ocupa 4 bytes de memória para ambas as arquiteturas de 32 e 64 bits em Java.