Java é o nome geral da linguagem de programação orientada a objetos Java e da plataforma Java lançada pela Sun Microsystems em maio de 1995. Foi desenvolvido em conjunto por James Gosling e colegas e lançado oficialmente em 1995.
Java é dividido em três sistemas:
Em junho de 2005, foi realizada a conferência JavaOne e a SUN lançou o Java SE 6. Nessa época, várias versões do Java foram renomeadas para remover o número "2": J2EE foi renomeado como Java EE, J2SE foi renomeado como Java SE e J2ME foi renomeado como Java ME.
Em 2009, a Sun foi adquirida pela Oracle.
Em 2018, a organização de código aberto Eclipse Foundation anunciou que JavaEE (Enterprise Edition) seria renomeado como JakartaEE (Jakarta).
A sintaxe da linguagem Java é muito próxima da linguagem C e da linguagem C++, tornando-a fácil de aprender e usar para a maioria dos programadores. Por outro lado, Java descarta os recursos do C++ que são raramente usados, difíceis de entender e confusos, como sobrecarga de operador, herança múltipla e conversões automáticas. Em particular, a linguagem Java não usa ponteiros, mas sim referências. Ele também fornece um mecanismo automático de gerenciamento de reciclagem de memória para que os programadores não precisem se preocupar com o gerenciamento de memória.
A linguagem Java fornece primitivos como classes, interfaces e herança. Por uma questão de simplicidade, ela suporta apenas herança única entre classes, mas suporta herança múltipla entre interfaces e suporta o mecanismo de implementação entre classes e interfaces (a palavra-chave é implements). A linguagem Java oferece suporte total à ligação dinâmica, enquanto a linguagem C++ usa apenas ligação dinâmica para funções virtuais. Resumindo, a linguagem Java é uma linguagem de programação pura orientada a objetos.
A linguagem Java suporta o desenvolvimento de aplicações de Internet. Entre as interfaces básicas de programação de aplicações Java, existe uma interface de programação de aplicações de rede (java net), que fornece bibliotecas de classes para programação de aplicações de rede, incluindo URL, URLConnection, Socket, ServerSocket, etc. O mecanismo RMI (Ativação de Método Remoto) do Java também é um meio importante de desenvolvimento de aplicativos distribuídos.
O forte mecanismo de digitação do Java, tratamento de exceções, coleta automática de lixo, etc. são garantias importantes para a robustez dos programas Java. Descartar ponteiros é uma escolha inteligente para Java. O mecanismo de verificação de segurança do Java torna o Java mais robusto.
Java é geralmente usado em ambientes de rede. Por esse motivo, Java fornece um mecanismo de segurança para evitar ataques de código malicioso. Além dos diversos recursos de segurança da linguagem Java, Java possui um mecanismo de prevenção de segurança (classe ClassLoader) para classes baixadas pela rede, como alocação de diferentes espaços de nomes para evitar a substituição de classes locais com o mesmo nome, inspeção de código de bytes, e fornecer mecanismo de gerenciamento de segurança (classe SecurityManager) permite que aplicativos Java configurem sentinelas de segurança.
Os programas Java (arquivos com o sufixo java) são compilados em um formato de bytecode de arquitetura neutra (arquivos com a classe de sufixo) na plataforma Java e podem então ser executados em qualquer sistema que implemente esta plataforma Java. Essa abordagem é adequada para ambientes de rede heterogêneos e distribuição de software.
Essa portabilidade vem da neutralidade da arquitetura. Além disso, Java também regula estritamente o comprimento de cada tipo de dados básico. O próprio sistema Java também é altamente portátil. O compilador Java é implementado em Java e o ambiente de execução Java é implementado em ANSI C.
Conforme mencionado anteriormente, os programas Java são compilados em formato de bytecode na plataforma Java e podem então ser executados em qualquer sistema que implemente esta plataforma Java. Em tempo de execução, o interpretador Java na plataforma Java interpreta e executa esses bytecodes, e as classes necessárias durante a execução são carregadas no ambiente de execução durante a fase de conexão.
Comparado com aquelas linguagens de script interpretadas de alto nível, Java é realmente de alto desempenho. Na verdade, com o desenvolvimento da tecnologia de compilador JIT (Just-In-Time), a velocidade de execução do Java está cada vez mais próxima do C++.
Na linguagem Java, thread é um objeto especial que deve ser criado pela classe Thread ou seus descendentes (netos). Geralmente existem duas maneiras de criar um thread: primeiro, use o construtor do tipo Thread(Runnable) para agrupar um objeto que implementa a interface Runnable em um thread, segundo, derive uma subclasse da classe Thread e substitua o método run, o objeto; criado usando esta subclasse é um thread. Vale ressaltar que a classe Thread implementou a interface Runnable, portanto qualquer thread possui seu método run, e o método run contém o código a ser executado pela thread. A atividade de um thread é controlada por um conjunto de métodos. A linguagem Java suporta a execução simultânea de vários threads e fornece um mecanismo de sincronização entre vários threads (a palavra-chave é sincronizada).
Um dos objetivos de design da linguagem Java é adaptar-se a ambientes que mudam dinamicamente. As classes exigidas pelos programas Java podem ser carregadas dinamicamente no ambiente em execução ou as classes necessárias podem ser carregadas através da rede. Isso também facilita atualizações de software. Além disso, as classes em Java possuem uma representação em tempo de execução e podem realizar verificação de tipo em tempo de execução.
A linguagem Java tenta garantir que a memória do sistema esteja acima de 1G. Outras ferramentas são as seguintes:
Depois de instalar as ferramentas acima, podemos gerar o primeiro programa Java "Hello World!"
public class MyFirstJavaProgram { public static void main(String []args) { System.out.println("Hello World"); } }
No próximo capítulo apresentaremos como configurar o ambiente de desenvolvimento java.