| Java | |
|---|---|
| Paradigma | |
| Surgido em | 23 de maio de 1995 (31 anos) |
| Última versão | 27 (15 de setembro de 2026) |
| Criado por | |
| Estilo de tipagem |
|
| Principais implementações | |
| Influenciada por | |
| Influenciou | |
| Plataforma | Plataforma Java |
| Extensão do arquivo |
|
| Página oficial | www |
Java é uma linguagem de programação de propósito geral, baseada em classes e orientada a objetos, desenvolvida por uma equipe liderada por James Gosling na Sun Microsystems a partir de 1991. A linguagem foi apresentada publicamente em 1995. Em 2010, a Oracle Corporation concluiu a aquisição da Sun Microsystems, tornando-se responsável pela continuidade comercial de produtos e tecnologias da empresa, entre eles Java.
O código-fonte Java é normalmente compilado em bytecode, armazenado em arquivos de classe. Esse código é executado por uma máquina virtual Java (Java Virtual Machine, ou JVM), cuja implementação pode interpretá-lo ou compilá-lo dinamicamente para código nativo durante a execução. A linguagem é a principal linguagem associada à Plataforma Java, mas essa plataforma também pode executar programas escritos em outras linguagens que produzam código compatível com a JVM.
O desenvolvimento de Java começou em 1991, na Sun Microsystems, com o Green Project. A equipe central incluía James Gosling, Mike Sheridan e Patrick Naughton. O projeto procurava desenvolver software para dispositivos eletrônicos e sistemas computacionais que poderiam interagir com diferentes tipos de equipamentos. A linguagem criada durante o projeto recebeu inicialmente o nome de Oak.
Um dos protótipos produzidos foi o Star-7, um dispositivo portátil com interface gráfica sensível ao toque, concebido para controlar outros equipamentos. O projeto também originou Duke, personagem que se tornou o mascote da tecnologia Java. A equipe demonstrou uma versão funcional do sistema em 1992.
A equipe posteriormente redirecionou o desenvolvimento para aplicações distribuídas e para o uso em redes de computadores, em particular na internet. O nome Oak foi substituído por Java, e a tecnologia foi apresentada publicamente em 23 de maio de 1995. A plataforma foi concebida para permitir que o mesmo programa fosse executado em sistemas diferentes, desde que houvesse uma implementação compatível do ambiente de execução.
Durante os primeiros anos, Java ficou conhecida também pelo uso em aplicações executadas em navegadores por meio de applets. Esse modelo teve importância histórica para a difusão da linguagem, mas deixou de ser uma forma corrente de distribuição de aplicações web com o abandono do suporte a applets nos navegadores modernos. Java continuou a ser utilizada em diferentes domínios, incluindo aplicações empresariais, serviços de rede, software para computadores e sistemas embarcados.
O desenvolvimento das especificações de Java passou a contar com o Java Community Process (JCP), um processo de participação comunitária destinado a desenvolver e revisar especificações, implementações de referência e testes de compatibilidade para tecnologias Java.
O JCP não é uma licença de software. Trata-se de um processo de especificação e evolução de tecnologias; os termos de licenciamento dependem da implementação, dos componentes e da versão considerados.
Em novembro de 2006, a Sun Microsystems anunciou a disponibilização de grande parte do código-fonte da implementação da plataforma sob a GNU GPL. O processo de abertura do código foi concluído em 2007 e deu origem ao projeto OpenJDK, uma implementação de referência de código aberto da plataforma Java.
A Oracle anunciou a aquisição da Sun Microsystems em 2009 e concluiu a operação em 27 de janeiro de 2010. Com a aquisição, a Oracle assumiu a gestão de produtos e tecnologias da Sun, incluindo Java. O desenvolvimento da plataforma passou a envolver a Oracle, o projeto OpenJDK e a comunidade participante dos processos de especificação e implementação.
A partir do Java 9, lançado em 2017, os lançamentos da plataforma passaram a seguir uma cadência regular, em geral com novas versões principais em março e setembro. Algumas versões recebem suporte de longo prazo (LTS, do inglês *Long-Term Support*), conforme a política de suporte do fornecedor. A designação LTS e os prazos de suporte podem variar entre fornecedores e distribuições.
| Versão | Data de lançamento |
|---|---|
| JDK 1.0 | 23 de janeiro de 1996 |
| JDK 1.1 | 19 de fevereiro de 1997 |
| J2SE 1.2 | 8 de dezembro de 1998 |
| J2SE 1.3 | 8 de maio de 2000 |
| J2SE 1.4 | 6 de fevereiro de 2002 |
| J2SE 5.0 | 30 de setembro de 2004 |
| Java SE 6 | 11 de dezembro de 2006 |
| Java SE 7 | 28 de julho de 2011 |
| Java SE 8 (LTS) | 18 de março de 2014 |
| Java SE 9 | 21 de setembro de 2017 |
| Java SE 10 | 20 de março de 2018 |
| Java SE 11 (LTS) | 25 de setembro de 2018 |
| Java SE 12 | 19 de março de 2019 |
| Java SE 13 | 17 de setembro de 2019 |
| Java SE 14 | 17 de março de 2020 |
| Java SE 15 | 15 de setembro de 2020 |
| Java SE 16 | 16 de março de 2021 |
| Java SE 17 (LTS) | 14 de setembro de 2021 |
| Java SE 18 | 22 de março de 2022 |
| Java SE 19 | 20 de setembro de 2022 |
| Java SE 20 | 21 de março de 2023 |
| Java SE 21 (LTS) | 19 de setembro de 2023 |
| Java SE 22 | 19 de março de 2024 |
| Java SE 23 | 17 de setembro de 2024 |
| Java SE 24 | 18 de março de 2025 |
| Java SE 25 (LTS) | 16 de setembro de 2025 |
| Java SE 26 | 17 de março de 2026 |
| Java SE 27 | 15 de setembro de 2026 |
Java foi concebida para favorecer a portabilidade dos programas, a segurança do ambiente de execução, a programação orientada a objetos e o desenvolvimento de aplicações em diferentes sistemas computacionais. Entre suas características estão:
A sintaxe de Java apresenta semelhanças com a de C e C++, mas a linguagem possui modelo próprio de tipos, gerenciamento de memória e execução. Embora a orientação a objetos seja central, recursos introduzidos em diferentes versões também permitem expressar técnicas de programação funcional, genérica e concorrente.
A execução de bytecode pela JVM não implica que todas as instruções sejam interpretadas durante toda a execução. Implementações como a HotSpot podem compilar dinamicamente partes do programa para código de máquina, além de interpretar bytecode.
Não existe uma única condição de licenciamento aplicável indistintamente a todas as distribuições de Java. O OpenJDK é disponibilizado sob a GNU GPL versão 2, acompanhada da Classpath Exception. As condições de uso de uma distribuição Oracle JDK dependem da versão e dos termos aplicáveis a essa distribuição.
A abertura do código-fonte de grande parte da implementação da plataforma Java começou em 2006, durante a gestão da Sun Microsystems, e foi concluída em 2007. O projeto OpenJDK passou a oferecer uma implementação de código aberto da plataforma e serve de base para diversas distribuições de JDK.
Os exemplos a seguir ilustram recursos da linguagem. Cada bloco representa um exemplo independente; quando várias classes aparecem no mesmo bloco, podem ser colocadas em arquivos separados ou reunidas em um único arquivo se nenhuma delas for declarada como pública.
Em programas Java tradicionais iniciados pelo lançador da plataforma, um dos pontos de entrada mais conhecidos é o método `main`, com a assinatura `public static void main(String[] args)`. O parâmetro `args` recebe os argumentos informados na linha de comando.
public class OlaMundo {
/**
* Método de entrada do programa.
*
* public: permite o acesso ao método pelo lançador.
* static: permite chamar o método sem criar uma instância da classe.
* void: indica que o método não retorna um valor.
* main: nome reconhecido como ponto de entrada convencional.
* String[] args: array com os argumentos da linha de comando.
*/
public static void main(String[] args) {
System.out.println("Olá, mundo!");
}
}
O exemplo seguinte apresenta uma classe abstrata e duas classes derivadas que implementam seu método abstrato.
abstract class Animal {
public abstract void fazerBarulho();
}
class Cachorro extends Animal {
@Override
public void fazerBarulho() {
System.out.println("Au au!");
}
}
class Gato extends Animal {
@Override
public void fazerBarulho() {
System.out.println("Miau!");
}
}
As classes `Cachorro` e `Gato` herdam de `Animal` e fornecem implementações próprias para `fazerBarulho()`. A redefinição de um método herdado é denominada sobrescrita (override).
Java não permite que uma classe estenda diretamente mais de uma classe. Uma classe pode, porém, implementar várias interfaces; interfaces também podem estender outras interfaces. Essa possibilidade permite que um tipo satisfaça diferentes contratos sem exigir herança de múltiplas classes. Uma classe que não declara explicitamente outra superclasse herda diretamente de `Object`, a raiz da hierarquia de classes de Java.
Uma interface define um contrato de operações que uma classe pode implementar. As interfaces podem declarar métodos abstratos, métodos padrão (*default*), métodos estáticos e constantes, entre outros elementos previstos pela especificação da linguagem. Uma classe pode implementar mais de uma interface.
import java.awt.Color;
abstract class Animal {
public abstract void fazerBarulho();
}
interface Pesado {
double obterPeso();
}
interface Colorido {
Color obterCor();
}
class Porco extends Animal implements Pesado, Colorido {
@Override
public void fazerBarulho() {
System.out.println("Óinc!");
}
@Override
public double obterPeso() {
return 50.0;
}
@Override
public Color obterCor() {
return Color.BLACK;
}
public boolean enlameado() {
return true;
}
}
No exemplo, `Porco` estende `Animal` e implementa as interfaces `Pesado` e `Colorido`. A classe fornece uma implementação para cada método abstrato herdado ou declarado pelas interfaces.
É possível criar um objeto sem armazenar sua referência em uma variável. Isso não torna a classe do objeto anônima: no primeiro caso do exemplo, a classe `Cavalo` tem nome. No segundo, a expressão cria uma classe anônima que estende `Animal` e implementa seu método abstrato.
abstract class Animal {
public abstract void fazerBarulho();
}
class Cavalo extends Animal {
@Override
public void fazerBarulho() {
System.out.println("Relincho!");
}
}
class MostraBarulho {
public static void main(String[] args) {
new Cavalo().fazerBarulho();
new Animal() {
@Override
public void fazerBarulho() {
System.out.println("Quac!");
}
}.fazerBarulho();
}
}
A versão 8 de Java, lançada em 2014, acrescentou recursos importantes para a programação funcional, entre eles expressões lambda, referências a métodos e a API de *streams*. Esses recursos permitem, por exemplo, representar operações por meio de interfaces funcionais e encadear operações sobre coleções de dados.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> paradigmas = new ArrayList<>();
paradigmas.add("Genérico (1.5)");
paradigmas.add("Funcional (8)");
paradigmas.stream()
.map(String::toUpperCase)
.forEach(System.out::println);
}
}
Nesse exemplo, `stream()` cria um fluxo de elementos; `map()` transforma cada texto em letras maiúsculas; e `forEach()` executa uma operação para cada elemento resultante.
Há frameworks e bibliotecas que apoiam diferentes etapas do desenvolvimento de aplicações Java. Entre os exemplos conhecidos estão:
A presença de uma ferramenta nessa lista não implica que seja a mais utilizada ou recomendada para todos os projetos. A escolha depende do objetivo, da arquitetura, da manutenção e dos requisitos da aplicação.
O desenvolvimento Java pode ser feito em editores de texto e por ferramentas de linha de comando ou por meio de ambientes de desenvolvimento integrado (IDEs). Exemplos de ambientes e ferramentas associados ao ecossistema incluem:

A plataforma Java inclui bibliotecas, APIs, ambientes de execução e especificações destinados a diferentes tipos de aplicação. Alguns nomes pertencem a tecnologias históricas, enquanto outros continuam a ser encontrados em sistemas existentes ou em projetos de desenvolvimento.
A comunidade de desenvolvimento Java inclui grupos de usuários conhecidos como JUGs (*Java User Groups*), que organizam encontros, palestras, atividades de formação e intercâmbio técnico. No Brasil, comunidades, fóruns e portais dedicados à linguagem incluem o PortalJava e o GUJ. A dimensão e a atividade dessas comunidades variam ao longo do tempo.