Java (linguagem de programação)
| Java | |
|---|---|
| Paradigma | |
| Surgido em | 23 de maio de 1995 (31 anos)[1] |
| Última versão | 27 (15 de setembro de 2026[2]) |
| 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.[6][1] 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.[7]
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.[8][9] 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.
História
[editar | editar código]Desenvolvimento
[editar | editar código]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.[6]
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.[6]
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.[1][10]
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.[6]
Padronização e desenvolvimento da plataforma
[editar | editar código]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.[11]
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.[11][12]
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.[13][12]
Aquisição pela Oracle
[editar | editar código]A Oracle anunciou a aquisição da Sun Microsystems em 2009 e concluiu a operação em 27 de janeiro de 2010.[7] 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.
Versões
[editar | editar código]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.[14]
| Versão | Data de lançamento |
|---|---|
| JDK 1.0 | 23 de janeiro de 1996[15] |
| 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[16] |
| Java SE 24 | 18 de março de 2025[17] |
| Java SE 25 (LTS) | 16 de setembro de 2025[18] |
| Java SE 26 | 17 de março de 2026[19] |
| Java SE 27 | 15 de setembro de 2026[2] |
Características
[editar | editar código]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:
- Orientação a objetos: organiza os programas por meio de classes e objetos, com suporte a encapsulamento, herança e polimorfismo.
- Tipagem estática: os tipos das variáveis e expressões são verificados pelo sistema de tipos, em grande parte durante a compilação.
- Portabilidade: o compilador produz bytecode que pode ser executado em implementações compatíveis da máquina virtual Java.
- Bibliotecas e APIs: a plataforma oferece bibliotecas para operações comuns, entrada e saída, redes, coleções, concorrência, segurança e outras funções.
- Programação concorrente: disponibiliza mecanismos para executar e coordenar múltiplas tarefas, incluindo as APIs de *threads*.
- Gerenciamento automático de memória: o ambiente de execução inclui mecanismos de coleta de lixo para recuperar memória ocupada por objetos que já não são alcançáveis.
- Carregamento dinâmico: classes podem ser carregadas durante a execução, de acordo com as necessidades do programa.
- Internacionalização: as APIs incluem recursos para trabalhar com diferentes idiomas, localidades e conjuntos de caracteres.
- Recursos de rede: as bibliotecas incluem mecanismos para comunicação por rede e para a criação de aplicações distribuídas.
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.[8]
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.[9]
Licença
[editar | editar código]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.[12]
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.[12][20]
Exemplos de código
[editar | editar código]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.
Método main
[editar | editar código]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!");
}
}
Classes
[editar | editar código]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.[21]
Interfaces
[editar | editar código]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.
Objetos e classes anônimas
[editar | editar código]É 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();
}
}
Programação funcional
[editar | editar código]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.
Ferramentas
[editar | editar código]Frameworks e bibliotecas
[editar | editar código]Há frameworks e bibliotecas que apoiam diferentes etapas do desenvolvimento de aplicações Java. Entre os exemplos conhecidos estão:
- Hibernate — framework de mapeamento objeto-relacional.
- JUnit — framework para testes automatizados.
- Apache Log4j — biblioteca de registro de eventos e mensagens de diagnóstico.
- Spring — framework que inclui recursos para injeção de dependência, inversão de controle e desenvolvimento de aplicações.
- Apache Struts — framework web baseado no padrão de arquitetura MVC.
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.
Ambientes de desenvolvimento
[editar | editar código]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:
- BlueJ — ambiente educacional para aprender programação orientada a objetos.
- Eclipse — ambiente de desenvolvimento extensível.
- IntelliJ IDEA — ambiente de desenvolvimento integrado da JetBrains.
- JDeveloper — ambiente de desenvolvimento da Oracle.
- NetBeans — ambiente de desenvolvimento integrado que oferece suporte a Java.
- jEdit — editor de texto extensível com recursos para edição de código.
- JCreator — ambiente de desenvolvimento Java que teve uso em versões anteriores do ecossistema.
- JBuilder — ambiente de desenvolvimento historicamente associado à Borland.

Tecnologias associadas
[editar | editar código]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.
- Java SE — edição padrão da plataforma Java.
- Java ME — edição destinada a determinados dispositivos e ambientes de recursos limitados.
- Java EE — edição empresarial histórica, cuja evolução prosseguiu no ecossistema Jakarta EE.
- Java Card — plataforma para aplicações em cartões inteligentes e dispositivos semelhantes.
- JavaFX — conjunto de tecnologias para construção de interfaces gráficas.
- JDBC — API para acesso a bancos de dados relacionais.
- JNI — interface para integração entre código Java e código nativo.
- JMX — tecnologias de gerenciamento e monitoramento de aplicações Java.
- JAAS — serviços de autenticação e autorização.
- JCE — extensões de criptografia da plataforma Java.
- JNDI — interface de acesso a serviços de nomes e diretórios.
- JMS — API de mensageria.
- JSP — tecnologia histórica para geração de conteúdo web dinâmico.
- JSF — tecnologia de interface para aplicações web Java.
- JAIN — APIs relacionadas a redes e telecomunicações.
- J3D — API histórica para gráficos tridimensionais.
- JMX — API para gerenciamento de recursos e aplicações.
- JDO — API para persistência de objetos Java.
- JDMK — tecnologia histórica de gerenciamento de sistemas.
- JMF — framework histórico para mídia.
- JMI — interface para metadados.
- JavaSpaces — tecnologia de coordenação distribuída baseada em espaços de objetos.
- Jini — arquitetura histórica para sistemas distribuídos.
- Jiro — tecnologia histórica para integração e gerenciamento de serviços.
- JXTA — conjunto de protocolos e ferramentas para aplicações ponto a ponto.
- JSML — linguagem de marcação associada a tecnologias de fala.
- OSGi — especificação para sistemas modulares baseados em serviços.
- MARF — framework modular para reconhecimento de áudio.
- SuperWaba — plataforma histórica destinada a dispositivos portáteis.
Comunidade
[editar | editar código]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.
Ver também
[editar | editar código]Referências
- 1 2 3 «Architecture of the Example Applications». Oracle (em inglês). Consultado em 15 de outubro de 2026
- 1 2 «Oracle Releases Java 27 and Strengthens Post-Quantum Cryptography Support». Oracle (em inglês). 15 de setembro de 2026. Consultado em 15 de outubro de 2026
- 1 2 Barbara Liskov with John Guttag (2000). Program Development in Java – Abstraction, Specification, and Object-Oriented Design. [S.l.]: USA, Addison Wesley. ISBN 978-0-201-65768-5
- ↑ «Java 5 catches up with C#» (em inglês). Universidade de Oxford. Consultado em 10 de janeiro de 2010
- ↑ «Why Microsoft's C# isn't» (em inglês). CNET. Consultado em 10 de janeiro de 2010
- 1 2 3 4 «James Gosling». Computer History Museum (em inglês). Consultado em 15 de outubro de 2026
- 1 2 «Oracle Completes Acquisition of Sun». U.S. Securities and Exchange Commission (em inglês). 27 de janeiro de 2010. Consultado em 15 de outubro de 2026
- 1 2 «The Java Virtual Machine Specification». Oracle (em inglês). 4 de agosto de 2026. Consultado em 15 de outubro de 2026
- 1 2 «Java — Your Application Launcher». Dev.java (em inglês). Consultado em 15 de outubro de 2026
- ↑ «1995: Java 1.0 is introduced». Computer History Museum (em inglês). Consultado em 15 de outubro de 2026
- 1 2 «JCP Procedures Overview». Java Community Process (em inglês). Consultado em 15 de outubro de 2026
- 1 2 3 4 «Oracle JDK License General FAQs». Oracle (em inglês). 16 de setembro de 2025. Consultado em 15 de outubro de 2026
- ↑ «Sun begins releasing Java under the GPL». Free Software Foundation (em inglês). Consultado em 15 de outubro de 2026
- ↑ «Oracle Java SE Support Roadmap». Oracle (em inglês). Consultado em 15 de outubro de 2026
- ↑ «JAVASOFT SHIPS JAVA 1.0». Sun Microsystems (em inglês). 23 de janeiro de 1996. Consultado em 15 de outubro de 2026
- ↑ «JDK 23 Release Notes». Oracle (em inglês). 17 de setembro de 2024. Consultado em 15 de outubro de 2026
- ↑ «JDK 24 Release Notes». Oracle (em inglês). 18 de março de 2025. Consultado em 15 de outubro de 2026
- ↑ «Oracle Releases Java 25». Oracle (em inglês). 16 de setembro de 2025. Consultado em 15 de outubro de 2026
- ↑ «JDK 26 Release Notes». Oracle (em inglês). 17 de março de 2026. Consultado em 15 de outubro de 2026
- ↑ «OpenJDK». OpenJDK (em inglês). Consultado em 15 de outubro de 2026
- ↑ «Multiple Inheritance of State, Implementation, and Type». Oracle (em inglês). Consultado em 15 de outubro de 2026
Bibliografia
[editar | editar código]- Deitel, Harvey M. (2005). Java: Como Programar 6 ed. São Paulo: Pearson Education do Brasil. 1097 páginas
- Java e Orientação a Objetos 7 ed. [S.l.]: Caelum Ensino e Inovação
- Naughton, Patrick (1997). Dominando o Java: Guia Autorizado da Sun Microsystems. [S.l.]: Editora Makron Books
- Jepson, Brian (1997). Java Database Programming: Master Next Generation Web Database Techniques. [S.l.]: Wiley Computer Publishing. ISBN 0-471-16518-2
- Luckow, Décio Heizelman; Melo, Alexandre Altair de (2010). Programação Java para a Web: Aprenda a desenvolver uma aplicação financeira pessoal com as ferramentas mais modernas da plataforma Java. [S.l.]: Editora Novatec. ISBN 978-85-7522-238-6
