Linguagem de programação orientada a objetos criada pela empresa Sun Microsystem em 1991. No inicio tinha a finalidade se ser utilizada em eletrodomésticos, foi projetada e implementada por um pequeno grupo de pessoas, coordenado por James Gosling na Sun. Tornou-se famosa após o seu uso na internet, pela suas facilidades (Prós) Programas dinâmicos e extensíveis, Código Java organizado em unidades modulares orientadas por objeto chamadas classes. Cada classe é armazenada em um arquivo separado e somente descarregadas para o interpretador Java quando necessárias.
O código torna-se uma coleção interativa de componentes independentes de software.
Internacionalização, única linguagem de programação que suporta Unicode.
Eficiência do programador e tempo de comercialização , conjunto de APIs (Application Programming Interface) poderoso e bem projetado.
Por que Java?
Torna as páginas da Web mais interessantes Som, vídeo, animações, relógios, contadores
Nova plataforma, pode-se criar uma grande variedade de aplicações,planilhas eletrônicas, processadores de texto, jogos, salas de bate-papo, programas financeiros, gerência de recursos humanos, etc.
Portabilidade (Independente de plataforma), familiaridade (Similar ao C, C++), simplicidade (especificação simples – LP e JVM), distribuição (biblioteca poderosa – recursos p/ programação distribuída e concorrente), segurança (programas via rede com restrições de execução), orientada a objetos (baseada no modelo de Smalltalk e Simula67)
Contras: Desempenho, eficiência (código interpretado: bytecodes), necessidade de uma máquina virtual, por ser interpretada, torna-se mais lenta. Engenharia Reversa, bytecodes traduzidos facilmente p/ fonte java, bytecodes (programa-fonte praticamente completo - sem comentários), instabilidade, algumas APIs (bibliotecas) ainda instáveis, (In)segurança restrições pesadas ou ainda bem passíveis de serem violadas.
Conceitos Gerais: Carga Dinâmica de Código, programas não monolíticos: cada classe é armazenada independentemente e pode ser carregada somente qdo for utilizada.
Concorrência,permite múltiplas linhas de execução (threads) num mesmo programa e oferece primitivas para sincronizá-las.
Pilha de Execução, idêntica a outras OOPLs (cada thread numa pilha própria), coleta automática de lixo, desalocação de memória (objetos) automática.
Tratamento de Exceções , modelo de Objetos, incorpora todos os principais conceitos
Recursos de Rede, extensa biblioteca de rotinas que facilitam a cooperação com protocolos TCP/IP, como HTTP e FTP.
Maior facilidade de criação de conexões de rede do que C ou C++.
Aplicações Java podem abrir e acessar objetos na rede através das URLs.