Java | ||
Data da primeira versão | 1995 | |
---|---|---|
Paradigma | Orientado a objetos , estruturado , imperativo , funcional | |
Autor | Sun Microsystems | |
Desenvolvedores | Oracle Corporation | |
Última versão | Java SE 16.0.1 (20 de abril de 2021) | |
Digitando | Estático , forte , seguro , nominativo | |
Influenciado por | Objective-C , C ++ , Smalltalk , Eiffel , Ada 83 , Mesa , Modula-3 , Oberon , UCSD Pascal | |
Influenciado | C # , J # , Ada 2005 , Gambas , BeanShell , Clojure , ECMAScript , Groovy , JavaScript , PHP , Kotlin , Python , Scala , Seed7 , Vala , Processing | |
Implementações | Lista JVM | |
Sistema operacional | Multi plataforma | |
Licença | GNU GPLV2 + CPE | |
Local na rede Internet | www.oracle.com/java/technologies | |
Extensão de arquivo | java, class, jar, jad e jmod | |
Java é uma linguagem de programação orientada a objetos criada por James Gosling e Patrick Naughton , funcionários da Sun Microsystems , com o apoio de Bill Joy (co-fundador da Sun Microsystems em 1982 ), apresentada oficialmente em23 de maio de 1995na SunWorld .
A empresa Sun foi então comprada em 2009 pela empresa Oracle , que agora possui e mantém Java .
Uma peculiaridade do Java é que o software escrito nesta linguagem é compilado para uma representação binária intermediária que pode ser executada em uma Java Virtual Machine (JVM), independentemente do sistema operacional .
A linguagem Java assume amplamente a sintaxe da linguagem C ++ . No entanto, Java foi despojado dos conceitos mais sutis de C ++ e ambos os mais confusos, como ponteiros e referências, ou herança múltipla contornada pela implementação de interfaces . Da mesma forma, desde a versão 8, a chegada de interfaces funcionais introduz herança múltipla (sem o gerenciamento de atributos) com suas vantagens e desvantagens como a herança de diamante . Os designers favoreceram a abordagem orientada a objetos, de modo que em Java tudo é objeto, exceto tipos primitivos ( inteiros , números de ponto flutuante, etc.) que, no entanto, têm suas variantes que herdam do objeto Object (Integer, Float, ...).
Java permite que você desenvolva aplicativos cliente-servidor . Do lado do cliente, os miniaplicativos estão na origem da notoriedade da linguagem. É especialmente no lado do servidor que o Java se impôs no mundo dos negócios graças aos servlets , o lado do servidor dos miniaplicativos e, mais recentemente, o JSP ( JavaServer Pages ) que pode substituir o PHP , ASP e ASP.NET .
Java deu origem a um sistema operacional ( JavaOS ), ambientes de desenvolvimento ( eclipse / JDK ), máquinas virtuais ( MSJVM (en) , JRE ) aplicativo de plataforma cruzada ( JVM ), uma variação para dispositivos móveis / incorporados ( J2ME ), um gráfico biblioteca de design de interface ( AWT / Swing ), aplicações pesadas (Jude, Oracle SQL Worksheet, etc.), tecnologias web (servlets, applets) e uma variação para a empresa ( J2EE ). A portabilidade do bytecode Java é garantida pela máquina virtual Java e, possivelmente, por bibliotecas padrão incluídas em um JRE. Esta máquina virtual pode interpretar o bytecode ou compilá-lo rapidamente em linguagem de máquina. A portabilidade depende da portabilidade das JVMs em cada sistema operacional.
A linguagem Java vem de um projeto da Sun Microsystems datado de 1990: o engenheiro Patrick Naughton não estava satisfeito com a linguagem C ++ usada na Sun, suas interfaces de programação em linguagem C, bem como as ferramentas associadas. Enquanto considerava uma migração para a NeXT, ele teve a oportunidade de trabalhar em uma nova tecnologia e assim nasceu o Stealth Project ( stealth ).
O Projeto Stealth foi rapidamente renomeado para Projeto Verde com a chegada de James Gosling e Mike Sheridan. Juntos, com a ajuda de outros engenheiros, eles começaram a trabalhar em um escritório na Sand Hill Street em Menlo Park , Califórnia . Eles tentaram desenvolver tecnologia para o desenvolvimento de aplicativos de última geração, oferecendo à Sun a perspectiva de oportunidades únicas.
A equipe inicialmente planejou usar a linguagem C ++, mas a abandonou por diferentes motivos. Em primeiro lugar, eles estavam desenvolvendo em um sistema embarcado com recursos limitados e sentiam que usar C ++ exigia muito investimento e que essa complexidade era uma fonte de erro para os desenvolvedores. A falta de coleta de lixo significava que o gerenciamento de memória tinha que ser programado manualmente, um desafio, mas também uma fonte de erros.
A equipe também estava insatisfeita com as deficiências da linguagem C ++ em termos de segurança, programação distribuída e multithreading . Além disso, eles queriam uma plataforma que pudesse ser portada para qualquer tipo de dispositivo ou plataforma.
Bill Joy tinha imaginado uma nova linguagem que combina a melhor linguagem de programação Mesa (in) ea linguagem C . Em um artigo chamado Further ( Further ) , ele propôs à Sun que seus engenheiros estão desenvolvendo um ambiente orientado a objetos baseado em C ++. Originalmente, Gosling planejou modificar e melhorar a linguagem C ++, que ele chamou de C ++ ++ - mas a ideia foi logo abandonada em favor do desenvolvimento de uma nova linguagem de programação que eles chamaram de Oak. (Carvalho) em referência, de acordo com a lenda, uma árvore plantada em frente à janela de seu escritório .
A equipe trabalhou duro e, no verão de 1992, eles foram capazes de demonstrar uma plataforma incluindo o sistema operacional Green , a linguagem Oak (1992), bibliotecas e hardware. Sua primeira conquista, apresentada em3 de setembro de 1992, foi a construção de um PDA denominado Star7 possuindo uma interface gráfica e um agente inteligente denominado Duke para auxiliar o usuário.
Em novembro do mesmo ano, o Projeto Verde foi descontinuado para se tornar FirstPerson, Inc. , de propriedade integral da Sun Microsystems, e a equipe se mudou para Palo Alto. A equipe da FirstPerson estava interessada em construir ferramentas altamente interativas e quando a Time Warner lançou uma licitação para um decodificador multifuncional, a FirstPerson mudou seu foco para oferecer tal plataforma.
No entanto, a indústria de televisão a cabo descobriu que oferecia muitas opções para o usuário, e a FirstPerson perdeu o mercado para a Silicon Graphics . Incapaz de interessar a indústria audiovisual, a empresa foi reintegrada na Sun.
Junho para Julho de 1994, após três dias de brainstorming com John Gage, James Gosling, Joy, Naughton, Wayne Rosing e Eric Schmidt , a equipe mudou o foco da plataforma na web . Eles acreditavam que, com o advento do navegador Mosaic , a Internet era o lugar para desenvolver o mesmo tipo de ferramenta interativa que imaginaram para a indústria de cabo. Naughton desenvolveu como protótipo um pequeno navegador da web, WebRunner, que mais tarde se tornaria o HotJava .
No mesmo ano, a linguagem foi renomeada para Java depois que foi descoberto que o nome Oak já estava em uso por um fabricante de placas de vídeo.
Origem do nome JavaO nome "Java" não é uma sigla , foi escolhido durante o brainstorming para substituir o nome original "Oak" , por causa de um conflito com uma marca existente, porque o café ( "java" na gíria americana) é a bebida favorita de muitos programadores . O logotipo escolhido pela Sun também é uma xícara de café fumegante.
Lançamento público de JavaDentro Outubro de 1994, HotJava e a plataforma Java foram apresentados para Sun Executives . Java 1.0a estava disponível para download em 1994, mas a primeira versão pública do navegador HotJava chegou em23 de maio de 1995na conferência SunWorld .
O anúncio foi feito por John Gage, Diretor Científico da Sun Microsystems. Seu anúncio foi acompanhado pelo anúncio surpresa de Marc Andressen, vice-presidente do executivo da Netscape, de que a Netscape incluiria suporte a Java em seus navegadores. O9 de janeiro de 1996, o grupo Javasoft foi formado pela Sun Microsystems para desenvolver esta tecnologia. Duas semanas depois, a primeira versão do Java estava disponível.
O surgimento da versão 1.2 da linguagem marca uma virada significativa: foi em 2000 que a versão apareceu simultaneamente em duas plataformas Java:
A Sun então os qualifica como uma plataforma Java 2 em oposição às primeiras gerações 1.0 e 1.1. Todas as versões subsequentes, de J2EE 1.2 a Java SE ou Java EE 7, permanecem chamadas de plataformas Java 2, embora a '2' tenha sido oficialmente descontinuada.
Applets
Historicamente, a capacidade dos navegadores da Web de iniciar miniaplicativos Java era a única solução para exibir aplicativos rich client (RIA para aplicativos ricos da Internet ). Em seguida, surgiram tecnologias concorrentes, incluindo Macromedia Flash , DHTML JavaScript , Silverlight baseado em XAML ou Xul .
Os miniaplicativos na estação de trabalho do Cliente podem se comunicar com os servlets no Servidor, da mesma forma que o Javascript pode se comunicar com o Servidor por meio de AJAX . Flex usa tecnologia Flash por meio do Adobe Flash Player .
Em uma época em que o JavaScript sofria de problemas de compatibilidade entre navegadores, os miniaplicativos Java tinham a vantagem da portabilidade porque portar interfaces complexas era difícil para todos os navegadores do mercado.
Além da queda da "moda" do Java, o progresso feito nas tecnologias que competem com o Java levou a maioria dos desenvolvedores a abandonar os miniaplicativos Java e os problemas inerentes a esta tecnologia (incompatibilidades entre JVMs, baixo desempenho, bibliotecas ruins. Gráficos, complexidade ) Por fim, os navegadores modernos não incluem mais sistematicamente o ambiente Java por causa de seu grande tamanho, e a taxa de máquinas capazes de exibir miniaplicativos era de apenas 70% em 2010, muito menor do que para o Flash, por exemplo. Em 2010, quase todos os aplicativos rich client usavam tecnologias alternativas; Flash na maior parte, mas também GWT .
Finalmente, a chegada do HTML5 , com a intenção de incorporar muitos recursos RIA e multimídia , também torna os miniaplicativos obsoletos.
JavaFX
Com o aparecimento do Java 8 em Março 2014, JavaFX torna-se a ferramenta oficial de criação de kit de ferramentas Java GUI, para todos os tipos de aplicativos (aplicativos móveis, aplicativos de desktop, aplicativos da Web, etc.), o desenvolvimento de seu predecessor Swing sendo descontinuado (exceto para correções de bugs). JavaFX é uma API Java pura (a linguagem de script específica que estava associada a ela por um tempo foi abandonada). JavaFX contém uma ampla variedade de ferramentas, incluindo mídia de áudio e vídeo, gráficos 2D e 3D, programação web , programação paralela e muito mais.
Lado do servidorCom os servidores de aplicativos , os EJBs são usados para encapsular as classes definidas anteriormente. Esses elementos são usados em arquiteturas J2EE para aplicativos multicamadas. A vantagem que obtemos com este trabalho é poder ocultar do cliente a implementação do código no lado do servidor.
Uso da estação de trabalhoO uso nativo da linguagem Java para aplicativos em uma estação de trabalho permaneceu até agora relativamente raro devido à falta de velocidade. Porém, com o rápido aumento do poder dos computadores, as melhorias durante os anos 2000 na máquina virtual Java e na qualidade dos compiladores, várias tecnologias ganharam espaço como o NetBeans e o ambiente Eclipse , as tecnologias de arquivos compartilhados LimeWire , Vuze (ex Azureus) e I2P . Java também é usado no programa de matemática MATLAB , no nível da interface homem-máquina e para álgebra computacional. Os aplicativos Swing também estão surgindo como uma alternativa à tecnologia .NET.
Use com celularesOracle anuncia iníciooutubro de 2012na conferência JavaOne seu desejo de oferecer soluções Java para a área de software embarcado, para processadores menos potentes do que os normalmente disponíveis em PCs. A Oracle reúne todo um ecossistema de empresas especializadas nesses segmentos de mercado, como a editora MicroEJ ou até mesmo a STMicroelectronics que oferece Java em seus STM32s cujo core é um CortexM3 / M4.
Java, principalmente por meio do Eclipse e do NetBeans , já oferece ambientes de desenvolvimento integrados para dispositivos móveis. Java é a principal linguagem usada para desenvolver aplicativos para o sistema operacional gratuito do Google para celular : Android .
O JavaFX também pode permitir o uso de Java em celulares, embora esse não seja seu objetivo principal.
SO Windows, Mac OS X e GNU / LinuxA Microsoft forneceu em 2001 um ambiente de trabalho do tipo Java, chamado J ++ , com seus sistemas operacionais antes do lançamento do Windows XP . Na sequência de uma decisão do tribunal , e tendo em vista o não cumprimento das especificações desta linguagem, a Microsoft teve que abandonar esta e criar uma nova linguagem, denominada C # (ver capítulo " Independência vis-à-vis a plataforma " mais abaixo)
Muitos fabricantes de computador continuam a incluir um ambiente JRE em seus sistemas Windows.
Java também aparece como um padrão no Mac OS X da Apple , bem como para distribuições Linux . Então, hoje em dia, a maioria dos usuários pode lançar aplicativos Java sem nenhum problema. No entanto, em computadores Apple, a distribuição de Java 5 para Java 6 era feita diretamente pela Apple, e não pela Oracle. Esta política resultou em atrasos e restrições de versão:
Assim, o J2SE 1.4 não estava disponível antes do Mac OS X v10.2 (nome de código Jaguar ), J2SE 5.0 do Mac OS X v10.4 ( Tiger ), Java SE 6 só funciona no Mac OS X v10.5 ( Leopard ) equipado com um O processador Intel e Java 7 requerem um computador Mac Intel executando o Mac OS X v10.7 .3 ( Lion ).Licenciamento de código abertoO 11 de novembro de 2006, o código-fonte do compilador javac e da máquina virtual HotSpot foi lançado como código aberto sob a GNU General Public License .
O 13 de novembro de 2006, Sun Microsystems anuncia a passagem do Java, ou seja, o JDK (JRE e ferramentas de desenvolvimento) e os ambientes Java EE (CDDL já licenciado) e Java ME sob a licença GPL daquiMarço de 2007, sob o nome do projeto OpenJDK .
Dentro Maio de 2007, A Sun lança o OpenJDK sob uma licença gratuita. No entanto, o OpenJDK ainda depende de fragmentos de código não livre que a Sun não possui. É por isso que a empresa Redhat está lançando emjunho de 2007o projeto IcedTea (in) que visa substituir os fragmentos de código não livre e, assim, tornar o OpenJDK utilizável sem nenhum software proprietário. Dentrojunho de 2008, o projeto IcedTea passou no rigoroso teste de compatibilidade Java (TCK). IcedTea é, portanto, uma implementação de código aberto das especificações Java. A Sun, e depois a Oracle, entretanto, mantém o controle da tecnologia por meio de um catálogo de patentes aplicáveis ao Java, bem como pela manutenção do TCK sob uma licença proprietária.
Aquisição pela OracleA empresa Oracle adquiriu a empresa Sun Microsystems em 2009 . Agora podemos ver o logotipo da Oracle na documentação da API Java.
O 12 de abril de 2010, James Gosling , o criador da linguagem de programação Java, se demite da Oracle por motivos que não deseja revelar. Ele havia se tornado o CTO da divisão de software cliente da Oracle.
Em 2018, a Oracle anunciou que as atualizações de sua versão Java SE 8 para uso profissional estariam sujeitas a uma licença paga dajaneiro de 2019.
A linguagem Java passou por várias evoluções desde JDK 1.0 ( Java Development Kit ) com a adição de muitas classes e pacotes à biblioteca padrão. Desde o J2SE 1.4, a evolução do Java é liderada pelo JCP ( Java Community Process ) que usa o JSR ( Java Specification Requests ) para propor adições e mudanças na plataforma Java. A linguagem em si é especificada pela Especificação de Linguagem Java (JLS ), com mudanças no JLS sendo tratadas sob o código JSR 901.
Note-se que as sucessivas evoluções da linguagem dificilmente se relacionam com a sua sintaxe - relativamente estável desde o início - mas principalmente no enriquecimento de suas funções, com a incorporação e a otimização de bibliotecas de software ( API ) em campos próprios. Informática diversa : bases de dados, gestão XML, informática distribuída e web, multimédia, segurança, etc.
Numeração de versãoDevemos distinguir a versão da linguagem Java daquelas das plataformas e do JRE:
Às vezes, duas versões podem ser oferecidas simultaneamente, como 8u65 e 8u66: a diferença geralmente consiste em pequenas correções de bugs (sem nenhum impacto de segurança em particular), para as quais a atualização para a versão mais recente não é crítica e, portanto, fica à escolha dos administradores (JRE) ou desenvolvedores (JDK).
As versões públicas do Java podem ser seguidas por versões não públicas, chamadas Avançadas, reservadas para uso comercial; assim, Java 1.6u45 é a última versão pública do Java6, mas 6u113 é a última versão disponível finalmarço de 2016.
Versão | Última versão | Nome JSE / JRE | Nome de código | Especificações | JDK | Status outubro de 2018 | Período de manutenção | Suporte estendido |
---|---|---|---|---|---|---|---|---|
1.0 | 1.0.2 | Java 1.0 | Carvalho | JSR 52 | JDK 1.0.2 | Não há mais suporte ativo | 1996-2000 | |
1,1 | 8_16 | Java 1.1 | JSR 52 | 1.1.8_16 | Não há mais suporte ativo | 1997-2000 | ||
1,2 | 2_017 | J2SE 1.2 | Parque infantil | JSR 52 | 1.2.2_11 | Não há mais suporte ativo | 2000-2006 | |
1,3 | 1_29 | J2SE 1.3 | Francelho | JSR 58 | 1.3.1_29 | Obsoleto | 2000-2001 | |
1,4 | 2_30 | J2SE 1.4 | Merlin | JSR 59 | 1.4.2_30 | Obsoleto | 2000-2008 | |
1,5 | 0_22 a 0_85 | J2SE 5.0 | Tigre | JSR 176 | 1.5.0_22 | Obsoleto, 5u51 a 5u85 disponível apenas com suporte Oracle específico | 2002-2009 | Maio de 2015 |
1,6 | 0_45 a 0_111 | Java SE 6 | Mustang | JSR 270 | 6u113 | Obsoleto, 6u51 a 6u111 disponível apenas com suporte Oracle específico | 2005-2013 | Dezembro de 2018 |
1,7 | 0_79 a 0_80 | Java SE 7 | Golfinho | JSR 336 | 1.7.0_79 | Estável, versão 1.7.0_79 | 2011-2015 | Julho de 2022 |
1.8 | 0_171 | Java SE 8 | Kenai e depois Spider | JSR 337 | 1.8.0_171 | Estável, versão 1.8.0_171 oferecida aos usuários | 2014-set2018 | Julho de 2019 |
9 | 9.0.4 | Java SE 9 | Guarda-chuva | JSR 379 | 9.0.4 | Estábulo | 2018-? | |
10 | 10.0.1 | Java SE 10 | JSR 383 | 10.0.1 | suportado 6 meses antes do próximo lançamento do JDK Java11-LTS | 2018, não é uma versão LTS (suporte de longo prazo) | ||
11 | 11.0.1 | Java SE 11 | JSR 384 | 11.0.1 | Versão LTS | 2023 | 2026 | |
12 | 12.0.2 | Java SE 12 | JSR 386 | 12.0.2 | ||||
13 | Java SE 13 | JSR 388 | 13,0 | |||||
14 | Java SE 14 | JSR 389 | 14.0.1 |
Apenas os números da versão mais recente para cada lançamento são listados aqui. Os detalhes das modificações sucessivas por versão e por atualização podem ser encontrados em wikipedia.en / java_history .
Conteúdo e desenvolvimentos De JDK 1.0 a J2SE 1.4Lançado em 30 de setembro de 2004(3.270 classes e interfaces), seu codinome é Tiger . Ele é inicialmente numerado de 1,5, que sempre é usado como o número da versão interna. Desenvolvido por (in) JSR 176 , Tiger adicionou um número significativo de novos recursos à linguagem:
Este exemplo percorre o conteúdo do objeto de widgets da classe Iterable e contém apenas referências a objetos da classe Widget, atribuindo cada um desses elementos à variável w e, em seguida, chama o método display () no elemento w (especificado em JSR 201). Uma sintaxe semelhante será introduzida em 2011 no C ++ 11 .
Além das mudanças de idioma, mudanças mais significativas ocorreram ao longo dos anos, levando de algumas centenas de classes no JDK 1.0 para mais de 3.000 no J2SE 5.0. APIs inteiras, como Swing ou Java2D, foram adicionadas e muitos métodos do JDK 1.0 original foram declarados obsoletos (ou seja, obsoletos, eles podem ser removidos em uma versão posterior do Java).
Java SE 6Lançado em 11 de dezembro de 2006(3.777 classes e interfaces em mais de 20 pacotes), seu codinome é Mustang . Uma versão beta foi lançada em15 de fevereiro de 2006, outro beta em junho de 2006, uma versão de " candidato a lançamento " emNovembro de 2006, e a versão final em 12 de dezembro de 2006. Com esta versão, a Sun muda permanentemente o nome J2SE para Java SE e remove o .0 do número da versão.
Esta versão tem sido alvo de inúmeras falhas de segurança e suas atualizações corretivas, levando à versão 1.6.0_45 da Oracle e até 1.6.0_51 para sua versão Mac OS. Esta também é a última versão do Java em execução para Mac OS X 10.6 e anterior.
Java SE 7Lançado em 7 de julho de 2011(8000 classes e interfaces), seu codinome é Dolphin . Esta é a primeira versão sob a licença GNU GPL .
A partir da atualização 6 (7u6), a edição padrão da Oracle do Java novamente oferece suporte total ao Mac OS X, as atualizações para este sistema operacional não são mais suportadas pela Apple, mas pela Oracle. No entanto, esta versão do Java não é compatível com o Mac OS X v10.6 : de fato, algumas APIs exigidas pelo Java 7 foram incluídas pela Apple no Mac OS X 10.7.3, mas não se espera que sejam implementadas em versões anteriores do Mac OS. A versão 7u90 deabril de 2015 é a última atualização disponível publicamente para o Java 7.
Java 7 oferece os seguintes novos recursos, entre outros:
Codinome Kenai. Vários lançamentos em desenvolvimento do JDK estão disponíveis para download a partir do outono de 2013, e o Java 8 é lançado em meados deMarço 2014de acordo com um roteiro apresentado pela Oracle daMaio de 2013.
Uma das grandes novidades desta versão é a adição de lambdas , levando a um redesenho de parte da API, em particular as coleções e a noção de stream . Outras adições notáveis incluem opções, implementações padrão dentro de uma interface, um redesenho da API de data e muito mais. Por outro lado, a versão Enterprise Edition (Java 8 EE) não é esperada antes de 2017.
A modularização da JVM com o projeto Jigsaw , inicialmente planejado para esta versão, é por sua vez adiada para a versão 9, em particular por causa das vulnerabilidades de segurança encontradas pelo Java 6, que a Oracle preferiu corrigir em 2013 em relação às evoluções do Java.
Java SE 9Originalmente programado para 2015, mas adiado em parte devido ao projeto Jigsaw, esta versão foi finalmente lançada em 21 de setembro de 2017.
Java 9 integra:
Esta versão foi lançada em 20 de março de 2018.
Esta nova versão inclui em particular:
Esta versão foi lançada em 25 de setembro de 2018.
Além da mudança no modelo de suporte de versão de longo prazo, esta versão inclui:
Esta versão foi lançada em 19 de março de 2019.
Esta versão integra 8 evoluções:
Esta versão foi lançada em 17 de setembro de 2019.
Esta versão foi lançada em 17 de março de 2020
Esta versão foi lançada em 15 de setembro de 2020.
Java SE 16Esta versão foi lançada em 16 de março de 2021.
Quando a linguagem Java foi criada, decidiu-se que essa linguagem deveria atender a cinco objetivos:
A primeira característica, o caráter orientado a objetos ("OO") e coloquial, refere-se a um método de programação e desenho da linguagem e ao fato de um programa escrito em Java ser bastante semelhante a um programa escrito em C ++ .
Embora existam várias interpretações da expressão orientada a objetos , uma ideia chave neste tipo de desenvolvimento é que os diferentes tipos de dados devem estar diretamente associados às diferentes operações que podem ser realizadas nesses dados. Como resultado, os dados (chamados Propriedades ) e o código que os manipula (chamados Métodos ) são combinados em uma única entidade chamada Classe de Objeto. O código torna-se logicamente dividido em pequenas entidades coerentes e, portanto, torna-se mais simples de manter e mais facilmente reutilizável, sendo inerentemente modular.
Outros mecanismos, como herança, tornam possível explorar todas as características de uma Classe previamente escrita em seus próprios programas, sem nem mesmo ter que saber seu funcionamento interno - apenas se vê a interface (a interface descrita. Propriedades e métodos sem fornecer o código associado) . Java proíbe a noção de herança de várias classes pai, a menos que sejam interfaces.
Na versão 1.5 da linguagem foram adicionados os genéricos , um mecanismo de polimorfismo semelhante (mas diferente) aos templates da linguagem C ++ ou aos functores do OCaml . Os genéricos permitem expressar de forma mais simples e segura (do ponto de vista da digitação) as propriedades de objetos como containers (listas, árvores, etc.): o tipo de lista é então considerado genericamente em comparação com o tipo d ' objeto contido na lista.
Este elemento contribui para a robustez e o desempenho dos programas, o Garbage Collector é acionado regular e automaticamente durante a execução do programa. Em sistemas com vários processadores e / ou vários núcleos , isso até emprega vários threads de baixa prioridade para interromper a execução do programa o menos possível. Além disso, o programador pode sugerir a execução do coletor de lixo usando o método System.gc () se necessário .
Uma reclamação recorrente contra linguagens como C ++ é a tarefa onerosa de ter que programar manualmente o gerenciamento de memória. Em C ++, a memória alocada pelo programa para criar um objeto é desalocada quando é destruída (por exemplo, por uma chamada explícita ao operador de exclusão ). Se o programador se esquecer de codificar a desalocação, isso resultará em um " vazamento de memória " e o programa consumirá cada vez mais. Pior ainda, se um programa solicitar por engano a desalocação várias vezes ou usar uma área da memória após solicitar a desalocação, ele provavelmente se tornará instável e causará um erro fatal.
Em Java, muitos desses problemas são evitados usando o coletor de lixo . O espaço de memória necessário para cada objeto criado é gerenciado em um heap de memória (em inglês : heap de memória ) reservado para esse propósito. O programa acessa cada objeto por meio de uma referência no heap. Quando não há mais nenhuma referência para alcançar um objeto, o coletor de lixo o destrói automaticamente - já que ficou inacessível - liberando a memória e evitando assim qualquer vazamento de memória.
O coletor de lixo usa um algoritmo de marcação e liberação (em inglês : mark and sweep ) para gerenciar casos complexos de objetos que fazem referência uns aos outros ou loops de referências (para um exemplo de encadeamento duplo de lista ). Na prática, ainda existem casos de erro de programação onde o coletor de lixo considera que um objeto ainda é útil enquanto o programa não o acessa mais funcionalmente (mas mantém uma referência ao objeto), o que constitui um caso particular de " vazamento de memória ".
A coleta de lixo torna o gerenciamento de memória visivelmente mais fácil e seguro. Os designers e usuários de programas ou bibliotecas não precisam se preocupar com a desalocação de objetos (operador de exclusão em C ++), exceto possivelmente por motivos de desempenho.
A independência de plataforma significa que os programas escritos em Java têm um desempenho muito semelhante em diferentes arquiteturas de hardware. A licença da Sun para Java, portanto, insiste que todas as implementações devem ser compatíveis. Em teoria, podemos realizar o desenvolvimento em uma determinada arquitetura e executar o aplicativo final em todas as outras.
Este resultado é obtido por:
Note-se que mesmo se houver explicitamente uma primeira fase de compilação, o bytecode Java ou é interpretado ou convertidos na mosca em código nativo por um compilador em tempo real ( apenas no tempo , JIT).
Tipos de compilaçõesAs primeiras implementações da linguagem usaram uma máquina virtual interpretada para obter portabilidade. Essas implementações produziram programas que eram executados mais lentamente do que aqueles escritos em uma linguagem compilada (C, C ++, etc.), portanto, a linguagem sofria de uma reputação de baixo desempenho.
Implementações mais recentes da Java Virtual Machine (JVM) produzem programas muito mais rápidos do que antes, usando diferentes técnicas:
Depois que a Sun descobriu que a implementação da Microsoft não suportava interfaces RMI e JNI e tinha elementos específicos da plataforma em comparação com sua plataforma original, a Sun entrou com um processo contra a Microsoft e obteve indenização (US $ 20 milhões). Este ato de justiça tornou ainda mais rígidos os termos da licença da Sun. Em resposta, a Microsoft descontinuou o suporte para Java em suas plataformas e, nas versões recentes do Windows, o Internet Explorer não oferece suporte a miniaplicativos Java sem adicionar plug-ins. No entanto, a Sun disponibiliza ambientes de tempo de execução Java gratuitamente para as várias plataformas Microsoft.
Portabilidade é tecnicamente uma meta difícil de alcançar, e o sucesso do Java nessa área foi misto. Embora seja realmente possível escrever programas para a plataforma Java que funcionem bem em muitas máquinas alvo, o grande número de plataformas com pequenos erros e inconsistências resultou no uso indevido do slogan da Sun " Escreva uma vez, execute em qualquer lugar " ( "Escreva uma vez, execute em qualquer lugar " ) para " escrever uma vez, depurar em todos os lugares " ( " Gravar uma vez, depurar em todos os lugares " )!
A independência da plataforma Java é, no entanto, bem-sucedida com aplicativos do lado do servidor, como serviços da web, servlets e Java Beans, bem como sistemas integrados em OSGi, usando o ambiente Java integrado .
A plataforma Java foi um dos primeiros sistemas a oferecer suporte para a execução de código de fontes remotas. Um miniaplicativo pode ser executado no navegador da Web de um usuário, executando o código baixado de um servidor HTTP . O código de um miniaplicativo funciona em um espaço muito restrito, o que protege o usuário de códigos errados ou maliciosos. Este espaço é delimitado por um objeto denominado gerenciador de segurança . Esse objeto também existe para o código local, mas por padrão está inativo.
O gerenciador de segurança (a classe SecurityManager ) permite definir um certo número de autorizações de uso dos recursos do sistema local (sistema de arquivos, rede, propriedades do sistema, etc.). Uma autorização define:
Os editores de miniaplicativos podem solicitar um certificado para permitir que assinem digitalmente um miniaplicativo como seguro, potencialmente dando a eles (com a devida autorização) permissão para sair do espaço restritivo e acessar recursos do sistema local.
Aqui está um exemplo de um programa típico Hello world escrito em Java:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }O arquivo fonte quase sempre traz o nome da classe com a extensão ".java" (aqui "HelloWorld.java", seria até obrigatório porque a classe tem o atributo public em sua declaração - tornando-a acessível a todos os outros programas ) Podemos compilar e executar este exemplo no terminal com os seguintes comandos (no Linux ):
javac HelloWorld.java export CLASSPATH=. java HelloWorldA linha “ export CLASSPATH =. É usado para informar ao Java que ele também deve procurar programas de classe no diretório atual. Este caminho também pode ser especificado ao iniciar o programa usando a opção -classpath (ou -cp para abreviar):
java -cp. HelloWorldNotas:
( fonte )
Uma classe é a descrição de dados chamados de atributos e de operações chamadas de métodos. Este é um modelo de definição para objetos com o mesmo conjunto de atributos e o mesmo conjunto de operações. De uma classe, podemos criar um ou mais objetos por instanciação; cada objeto é uma instância de uma única classe.
Visibilidade:
Um atributo é definido fornecendo seu tipo, depois seu nome e possivelmente uma parte de inicialização.
Visibilidade:
Um método é definido por:
Visibilidade:
Sobrenome | Tamanho em bytes durante os cálculos | Valor padrão | Valores possíveis |
---|---|---|---|
boleano | Um único bit é suficiente, mas geralmente reservamos um byte para armazená-los. | false | true, false |
byte | 1 | 0 | inteiros entre -128 e +127 (-2 7 e 2 7 -1) |
shorts | 2 | 0 | inteiros entre −32 768 e 32 767 (-2 15 e 2 15 -1) |
int | 4 | 0 | inteiros entre −2 147 483 648 e +2 147 483 647 (-2 31 e 2 31 -1) |
longo | 8 | 0 | inteiros entre -9 223 372 036 854 775 808 e 9 223 372 036 854 775 807 (-2 63 e 2 63 -1) |
tanque | 2 | '\u0000' | Todos os valores Unicode (valores U + L + 0000 a FFFF, 4 dígitos necessários depois '\u') os primeiros 128 caracteres são códigos ASCII e apóstrofo blocos: 'a', '1', '\'', '\n'. |
flutuador | 4 | 0.0 | Conjunto de números [−3,402 823 47 × 10 38 .. −1,402 398 46 × 10 −45 ], 0, [1,402 398 46 × 10 −45 .. 3,402 823 47 × 10 38 ] |
Duplo | 8 | 0.0 | Conjunto de números [−1.797 693 134 862 315 70 × 10 308 .. −4.940 656 458 412 465 44 × 10 −324 ], 0, [4.940 656 458 412 465 44 × 10 −324 .. 1.797 693 134 862 315 70 × 10.308 ] |
Objeto | Dependente de máquina virtual | null |
A tabela acima lista os tipos básicos, no entanto, existem outros tipos em Java que são objetos e devem ser usados como tal. Por exemplo, para definir um inteiro, podemos usar o tipo 'Integer' cujo valor de inicialização por padrão seránull
Para instanciar uma variável, a sintaxe (aqui a mesma que em C) é a seguinte:
NomDuType maVariable;myVariable é então alocado na pilha.
Muitas vezes é necessário armazenar muitos dados nas coleções: lista de compras, notas do aluno, etc. As coleções podem ser consultadas, modificadas, podemos ordená-las, copiá-las, apagá-las, etc. Eles podem ter um tamanho fixo ou variável.
Coleções de tamanho fixo são mais leves do que coleções de tamanho variável.
Coleções de tamanho fixoA classe abstrata AbstractListé fornecida para implementar coleções de tamanho variável.
Para inicializar um ArrayList, você deve importar a classe java.util.ArrayListe escrever liste = new ArrayList<T>();ou liste = new ArrayList<>(); do JDK 7.0.
Desde o JDK 1.5, temos a possibilidade de indicar o tipo dos elementos contidos em um ArrayList: inteiros, strings de caracteres ou outros objetos.
Para adicionar um elemento, escrevemos liste.add(Objet);
Para acessar um elemento da ArrayList: liste.get(index);
Para descobrir o número de elementos que uma lista contém: liste.size();
Para excluir um elemento: liste.remove(index);os elementos após o elemento excluído serão deslocados para a esquerda.
Embora todos tenham uma função semelhante, cada loop é, no entanto, adaptado a uma situação:
Nota : é possível combinar condições (expressões booleanas) usando operadores adicionais: o "AND" lógico && (instrução executada se todas as condições forem verdadeiras):
Também existe o “OU” lógico || (instrução executada se pelo menos uma das condições for verdadeira):
if (<condition 1> || <condition 2>) { instruction(s) si au moins une des deux est vraie }Finalmente, existe o “NÃO” lógico ! que permite reverter o resultado de uma condição.
É possível combinar essas operações para obter estruturas condicionais complexas. Você pode adicionar parênteses para definir as prioridades das condições (como em um cálculo). Em outros casos, a JVM executa as várias verificações da esquerda para a direita.
A escolha de execução das instruções é determinada pela expressão seguinte ao switch, cujo tipo pode ser inteiro ( int , char , byte ou curto ou classes de envelope correspondentes), enumerado ( enum ) ou String (string de caracteres, desde Java 7 apenas).
Nota: ' O operador condicional ou operador ternário ? : pode ser usado para evitar o uso de uma instrução condicional. Uma expressão condicional terá um ou outro valor após testar a condição booleana:
<expression booléenne> ? <valeur si vrai> : <valeur si faux> Conexões incondicionaisO bloco de código finalmente será executado independentemente do resultado quando o programa sair do bloco try-catch .
Aqui está um exemplo de captura de uma exceção:
FileOutputStream fos = null; try { //Chacune de ces deux instructions peut générer une exception // création d'un flux pour écrire dans un fichier fos = new FileOutputStream(...); // écriture de données dans ce flux fos.write(...); } catch (IOException e) { //Gestion de l'erreur de création ou d'écriture dans le flux e.printStackTrace(); } finally{ //Cette section de code est toujours exécutée, qu’il y ait une exception ou pas // fermeture du flux s'il a été ouvert if(fos != null) fos.close(); }Este exemplo ilustra o mecanismo de exceções em Java. No caso de um erro de entrada / saída no bloco try , a execução é retomada no bloco catch correspondente a esta situação (exceção do tipo IOException ).
Neste bloco catch , a variável e faz referência à exceção que ocorreu. Aqui, invocamos o método printStackTrace () que exibe no console informações sobre a exceção que ocorreu: nome, motivo, estado da pilha de chamadas quando a exceção foi lançada e, opcionalmente, o número da linha onde ocorreu o erro.
O bloco finally é então executado (aqui para fechar os recursos usados). Este é apenas um exemplo, a ação a ser executada quando ocorre uma exceção depende da operação geral do aplicativo e da natureza da exceção.
Tipos genéricosUm tipo genérico também é chamado de Template e recebe um ou mais outros tipos como argumentos. O tipo passado como parâmetro é determinado durante a instanciação.
Isso torna possível, em particular no contexto de ArrayLists, evitar conversões.
public class ArrayList<E> { ArrayList<String> al = new ArrayList<String>(); }Esses tipos genéricos são usados apenas em tempo de compilação, não diretamente no bytecode.
Diferença com C ++: os modelos em C ++ duplicam uma classe para cada tipo. Java, por outro lado, atua em tempo de compilação como se tivéssemos duplicado as classes desses tipos intrínsecos, mas na verdade só lida com uma classe.
Codificação do código fonteAs especificações da linguagem Java especificam que ela é formada por caracteres no formato UTF-16 , o que permite a utilização no código-fonte de todos os caracteres existentes no mundo:
public class HelloWorld { private String text = "hello world"; }Para garantir a portabilidade entre plataformas, os nomes das classes devem, entretanto, consistir apenas em caracteres ASCII .
Operador | Significado |
---|---|
== | Igual (não deve ser confundido com = que é o operador de atribuição) |
! = | Diferente |
< | Inferior |
> | Superior |
<= | Menor ou igual |
> = | Melhor que ou igual a |
JavaStyle são convenções de programação da linguagem Java definidas pela Sun. O respeito às convenções estritas garante homogeneidade no código-fonte de um aplicativo desenvolvido por uma equipe inteira e promove a distribuição do código-fonte para uma comunidade que compartilha as mesmas convenções de codificação.
O caso do camelo inferior é usado para os nomes dos métodos e variáveis.
A Sun fornece um grande número de estruturas e APIs para permitir o uso de Java para uma ampla variedade de usos.
Existem essencialmente quatro estruturas principais :
A persistência é baseada em padrões:
No entanto, existem muitas outras tecnologias, APIs e extensões opcionais para Java:
A programação pode ser feita a partir de um prompt de comando , iniciando um compilador Java (geralmente chamado de javac ), mas para mais conveniência, é melhor usar um ambiente de desenvolvimento integrado ou IDE (que permite compilar automaticamente), alguns são gratuitos. Por exemplo :
Um programa Java pode ser produzido com ferramentas que automatizam o processo de construção (ou seja, a automação de algumas tarefas envolvendo um número potencialmente grande de dependências, como uso de biblioteca, compilação, geração de arquivos, documentação, implantação, etc.). Os mais usados são:
Resultados:
% scons -Q javac -d classes -sourcepath src src/Exemple1.java src/Exemple2.java src/Exemple3.java jar cf test.jar classes