Java (linguagem de programação)

Da Wikipédia, a enciclopédia livre
Ir para navegação Pular para pesquisar

Java
Linguagem de programação Java logo.svg
ParadigmaMulti-paradigma : genérico , orientado a objetos ( baseado em classe ), funcional , imperativo , reflexivo , concorrente
Projetado porJames Gosling
DesenvolvedorOracle Corporation
Apareceu pela primeira vez23 de maio de 1995 ; 26 anos atrás [1] ( 23/05/1995 )
Versão estável
Java SE 17 [2] Edite isso no Wikidata / 14 de setembro de 2021 ; 25 dias atrás ( 14 de setembro de 2021 )
Disciplina de digitaçãoEstático, forte, seguro , nominativo , manifesto
Extensões de nome de arquivo.java, .class , .jar , .jmod
Local na rede Internetoracle .com / java /
Influenciado por
CLU , [3] Simula67 , [3] Lisp , [3] Smalltalk , [3] Ada 83 , C ++ , [4] C # , [5] Eiffel , [6] Mesa , [7] Modula-3 , [8] Oberon , [9] Objective-C , [10] UCSD Pascal , [11] [12] Object Pascal [13]
Influenciado
Ada 2005 , BeanShell , C # , Chapel , [14] Clojure , ECMAScript , Fantom , Gambas , [15] Groovy , Hack , [16] Haxe , J # , Kotlin , PHP , Python , Scala , Seed7 , Vala , JavaScript

Java é uma de alto nível , com base na classe , orientada a objeto linguagem de programação que é projetado para ter o menor número de implementação dependências quanto possível. É uma linguagem de programação de propósito geral destinada a permitir que os programadores escrevam uma vez, execute em qualquer lugar (WORA), [17] o que significa que o código Java compilado pode ser executado em todas as plataformas que suportam Java sem a necessidade de recompilação. [18] Os aplicativos Java são normalmente compilados para bytecode que pode ser executado em qualquer máquina virtual Java (JVM), independentemente doarquitetura do computador . A sintaxe de Java é semelhante a C e C ++ , mas tem menos recursos de baixo nível do que qualquer um deles. O Java runtime fornece recursos dinâmicos (como reflexão e modificação do código do runtime) que normalmente não estão disponíveis nas linguagens compiladas tradicionais. Em 2019 , Java era uma das linguagens de programação mais populares em uso de acordo com o GitHub , [19] [20] particularmente para aplicativos da Web cliente-servidor , com cerca de 9 milhões de desenvolvedores. [21]

Java foi originalmente desenvolvido por James Gosling na Sun Microsystems ( que desde então foi adquirida pela Oracle ) e lançado em 1995 como um componente principal da plataforma Java da Sun Microsystems . Os compiladores Java , máquinas virtuais e bibliotecas de classes originais e de referência de implementação foram originalmente lançados pela Sun sob licenças proprietárias . Em maio de 2007, em conformidade com as especificações do Java Community Process , a Sun havia relicenciado a maioria de suas tecnologias Java sob a licença somente GPL-2.0 . Oracle oferece seu próprio HotSpotJava Virtual Machine, no entanto, a implementação de referência oficial é o OpenJDK JVM, que é um software de código aberto gratuito usado pela maioria dos desenvolvedores e é o JVM padrão para quase todas as distribuições Linux.

Em outubro de 2021 , Java 17 é a versão mais recente. Java 8, 11 e 17 são as versões atuais de suporte de longo prazo (LTS). A Oracle lançou a última atualização pública de custo zero para a versão legada do Java 8 LTS em janeiro de 2019 para uso comercial, embora de outra forma ainda suporte o Java 8 com atualizações públicas para uso pessoal indefinidamente. Outros fornecedores começaram a oferecer compilações de custo zero do OpenJDK 8 e 11 que ainda estão recebendo segurança e outras atualizações.

A Oracle (e outros) recomenda fortemente a desinstalação de versões desatualizadas e sem suporte do Java, por causa dos sérios riscos devido a problemas de segurança não resolvidos. [22] A Oracle aconselha seus usuários a fazer a transição imediata para uma versão com suporte, como uma das versões LTS (8, 11, 17).

História

Duke, o mascote Java
James Gosling , o criador do Java, em 2008
O gráfico do índice de popularidade da linguagem de programação TIOBE de 2002 a 2018. Java esteve firmemente no topo de meados de 2015 até o início de 2020.

James Gosling , Mike Sheridan e Patrick Naughton iniciaram o projeto da linguagem Java em junho de 1991. [23] Java foi originalmente projetado para televisão interativa, mas era muito avançado para a indústria de televisão digital a cabo na época. [24] A língua foi inicialmente chamada de carvalho em homenagem a um carvalho que ficava do lado de fora do escritório de Gosling. Posteriormente, o projeto passou a se chamar Green e finalmente foi renomeado para Java , de Java coffee , um tipo de café da Indonésia . [25] Gosling projetou Java com um C / C ++Sintaxe de estilo que os programadores de sistema e aplicativo achariam familiar. [26]

A Sun Microsystems lançou a primeira implementação pública como Java 1.0 em 1996. [27] Ela prometia a funcionalidade Write Once, Run Anywhere ( WORA ), fornecendo tempos de execução gratuitos em plataformas populares . Bastante seguro e com segurança configurável, ele permitia restrições de acesso à rede e a arquivos. Os principais navegadores da web logo incorporaram a capacidade de executar miniaplicativos Java em páginas da web, e o Java rapidamente se tornou popular. O compilador Java 1.0 foi reescrito em Java por Arthur van Hoff para cumprir estritamente com a especificação da linguagem Java 1.0. [28]Com o advento do Java 2 (lançado inicialmente como J2SE 1.2 em dezembro de 1998 - 1999), as novas versões tinham várias configurações construídas para diferentes tipos de plataformas. J2EE incluiu tecnologias e APIs para aplicativos corporativos normalmente executados em ambientes de servidor, enquanto J2ME apresentava APIs otimizadas para aplicativos móveis. A versão desktop foi renomeada J2SE. Em 2006, para fins de marketing, a Sun renomeou as novas versões do J2 como Java EE , Java ME e Java SE , respectivamente.

Em 1997, a Sun Microsystems abordou o corpo de padrões ISO / IEC JTC 1 e mais tarde a Ecma International para formalizar o Java, mas logo se retirou do processo. [29] [30] [31] Java continua sendo um padrão de fato , controlado por meio do Java Community Process . [32] Ao mesmo tempo, a Sun disponibilizou a maioria de suas implementações Java gratuitamente, apesar de seu status de software proprietário . A Sun gerou receita com Java por meio da venda de licenças para produtos especializados, como o Java Enterprise System.

Em 13 de novembro de 2006, a Sun lançou grande parte de sua máquina virtual Java (JVM) como software livre e de código aberto (FOSS), sob os termos da licença exclusiva GPL 2.0 . Em 8 de maio de 2007, a Sun concluiu o processo, disponibilizando todo o código principal da JVM sob os termos de distribuição de software livre / código aberto, além de uma pequena parte do código do qual a Sun não detinha os direitos autorais. [33]

O vice-presidente da Sun, Rich Green, disse que o papel ideal da Sun em relação ao Java é o de evangelista . [34] Após a aquisição da Sun Microsystems pela Oracle Corporation em 2009–10, a Oracle se descreveu como o administrador da tecnologia Java com um compromisso implacável de promover uma comunidade de participação e transparência. [35] Isso não impediu a Oracle de entrar com uma ação judicial contra o Google logo depois disso por usar Java dentro do Android SDK (consulte a seção Android ).

Em 2 de abril de 2010, James Gosling renunciou à Oracle . [36]

Em janeiro de 2016, a Oracle anunciou que os ambientes de tempo de execução Java baseados no JDK 9 irão descontinuar o plug-in do navegador. [37]

O software Java é executado em tudo, desde laptops a centros de dados , consoles de jogos a supercomputadores científicos . [38]

Princípios

Havia cinco objetivos principais na criação da linguagem Java: [18]

  1. Deve ser simples, orientado a objetos e familiar.
  2. Deve ser robusto e seguro.
  3. Deve ser neutro em termos de arquitetura e portátil.
  4. Deve ser executado com alto desempenho.
  5. Deve ser interpretado , encadeado e dinâmico .

Versões

Desde setembro de 2021 , Java 8, 11 e 17 são suportados como versões de Long-Term Support (LTS). [39] Principais versões de lançamento do Java, junto com suas datas de lançamento:

Versão Encontro
JDK Beta 1995
JDK1.0 23 de janeiro de 1996 [40]
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 [41]
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 [42]
Java SE 16 16 de março de 2021
Java SE 17 (LTS) 14 de setembro de 2021
Java SE 18 Março de 2022

Edições

A Sun definiu e oferece suporte a quatro edições de Java voltadas para diferentes ambientes de aplicativos e segmentou muitas de suas APIs para que pertençam a uma das plataformas. As plataformas são:

As classes nas APIs Java são organizadas em grupos separados chamados pacotes . Cada pacote contém um conjunto de interfaces , classes, subpacotes e exceções relacionadas .

A Sun também forneceu uma edição chamada Personal Java que foi substituída por pares posteriores de perfis de configuração Java ME baseados em padrões.

Sistema de execução

Java JVM e bytecode

Um objetivo de design do Java é a portabilidade , o que significa que os programas escritos para a plataforma Java devem ser executados de forma semelhante em qualquer combinação de hardware e sistema operacional com suporte de tempo de execução adequado. Isso é obtido compilando o código da linguagem Java para uma representação intermediária chamada bytecode Java , em vez de diretamente para o código de máquina específico da arquitetura . As instruções de bytecode Java são análogas ao código de máquina, mas se destinam a ser executadas por uma máquina virtual (VM) escrita especificamente para o hardware host. Os usuários finais geralmente usam um Java Runtime Environment (JRE) instalado em sua máquina para aplicativos Java autônomos ou em um navegador da web paraMiniaplicativos Java .

Bibliotecas padrão fornecem uma maneira genérica de acessar recursos específicos do host, como gráficos, encadeamento e rede .

O uso de bytecode universal torna a portabilidade simples. No entanto, a sobrecarga da interpretação do bytecode em instruções de máquina fez com que os programas interpretados quase sempre rodassem mais lentamente do que os executáveis nativos . Compiladores just -in-time (JIT) que compilam códigos de byte para código de máquina durante o tempo de execução foram introduzidos desde um estágio inicial. O próprio Java é independente de plataforma e é adaptado para a plataforma específica em que deve ser executado por uma máquina virtual Java (JVM) para ele, que traduz o bytecode Java na linguagem de máquina da plataforma. [47]

Performance

Os programas escritos em Java têm a reputação de serem mais lentos e exigirem mais memória do que os escritos em C ++ . [48] [49] No entanto, a velocidade de execução de programas Java melhorou significativamente com a introdução da compilação just-in-time em 1997/1998 para Java 1.1 , [50] a adição de recursos de linguagem que suportam uma melhor análise de código (como classes internas , a classe StringBuilder, asserções opcionais, etc.) e otimizações na máquina virtual Java, como HotSpot tornando-se o JVM padrão da Sun em 2000. Com o Java 1.5, o desempenho foi aprimorado com a adição do pacote java.util.concurrent, incluindo implementações sem bloqueio doConcurrentMaps e outras coleções multi-core, e foi melhorado ainda mais com Java 1.6.

Não JVM

Algumas plataformas oferecem suporte direto de hardware para Java; existem microcontroladores que podem executar bytecode Java em hardware em vez de uma máquina virtual Java de software, [51] e alguns processadores baseados em ARM podem ter suporte de hardware para executar bytecode Java por meio de sua opção Jazelle , embora o suporte tenha sido praticamente eliminado nas implementações atuais de ARM.

Gerenciamento automático de memória

Java usa um coletor de lixo automático para gerenciar a memória no ciclo de vida do objeto . O programador determina quando os objetos são criados, e o Java runtime é responsável por recuperar a memória quando os objetos não estão mais em uso. Uma vez que nenhuma referência a um objeto permaneça, a memória inacessível torna-se elegível para ser liberada automaticamente pelo coletor de lixo. Algo semelhante a um vazamento de memória ainda pode ocorrer se o código de um programador contém uma referência a um objeto que não é mais necessário, normalmente quando os objetos que não são mais necessários são armazenados em contêineres que ainda estão em uso. Se métodos para um objeto inexistente são chamados, uma exceção de ponteiro nulo é lançada. [52] [53]

Uma das ideias por trás do modelo de gerenciamento automático de memória Java é que os programadores podem ser poupados do fardo de ter que executar o gerenciamento manual de memória. Em algumas linguagens, a memória para a criação de objetos é alocada implicitamente na pilha ou alocada e desalocada explicitamente da pilha . Neste último caso, a responsabilidade de gerenciar a memória é do programador. Se o programa não desalocar um objeto, ocorre um vazamento de memória . Se o programa tentar acessar ou desalocar a memória que já foi desalocada, o resultado será indefinido e difícil de prever, e o programa provavelmente ficará instável ou travará. Isso pode ser parcialmente remediado pelo uso de ponteiros inteligentes, mas isso adiciona sobrecarga e complexidade. Observe que a coleta de lixo não evita vazamentos de memória lógica , ou seja, aqueles em que a memória ainda é referenciada, mas nunca usada.

A coleta de lixo pode acontecer a qualquer momento. Idealmente, isso ocorrerá quando um programa estiver ocioso. É garantido que será disparado se não houver memória livre suficiente no heap para alocar um novo objeto; isso pode fazer com que o programa pare momentaneamente. O gerenciamento explícito de memória não é possível em Java.

Java não suporta aritmética de ponteiro no estilo C / C ++ , onde endereços de objetos podem ser manipulados aritmeticamente (por exemplo, adicionando ou subtraindo um deslocamento). Isso permite que o coletor de lixo realoque os objetos referenciados e garante a segurança do tipo.

Como em C ++ e algumas outras linguagens orientadas a objetos, as variáveis ​​dos tipos de dados primitivos de Java são armazenadas diretamente em campos (para objetos) ou na pilha (para métodos) em vez de no heap, como é comumente verdadeiro para dados não primitivos tipos (mas veja a análise de escape ). Esta foi uma decisão consciente dos designers de Java por motivos de desempenho.

Java contém vários tipos de coletores de lixo. Desde o Java 9, o HotSpot usa o Garbage First Garbage Collector (G1GC) como padrão. [54] No entanto, também existem vários outros coletores de lixo que podem ser usados ​​para gerenciar o heap. Para a maioria dos aplicativos em Java, G1GC é suficiente. Anteriormente, o Coletor de Lixo Paralelo era usado no Java 8.

Ter resolvido o problema de gerenciamento de memória não libera o programador do fardo de lidar adequadamente com outros tipos de recursos, como conexões de rede ou banco de dados, identificadores de arquivos, etc., especialmente na presença de exceções.

Sintaxe

Gráfico de dependência das classes Java Core (criadas com jdeps e Gephi )

A sintaxe de Java é fortemente influenciada pelo C ++ e C . Ao contrário do C ++, que combina a sintaxe para programação estruturada, genérica e orientada a objetos, Java foi construído quase exclusivamente como uma linguagem orientada a objetos. [18] Todo o código é escrito dentro de classes, e cada item de dados é um objeto, com exceção dos tipos de dados primitivos, (ou seja, inteiros, números de ponto flutuante, valores booleanos e caracteres), que não são objetos por motivos de desempenho . Java reutiliza alguns aspectos populares do C ++ (como o printfmétodo).

Ao contrário do C ++, Java não suporta sobrecarga de operador [55] ou herança múltipla para classes, embora herança múltipla seja suportada para interfaces . [56]

Java usa comentários semelhantes aos de C ++. Existem três estilos diferentes de comentários: um estilo de linha única marcado com duas barras ( //), um estilo de linha múltipla aberto com /*e fechado com */e o estilo de comentário Javadoc aberto com /**e fechado com */. O estilo Javadoc de comentários permite que o usuário execute o executável Javadoc para criar a documentação do programa e pode ser lido por alguns ambientes de desenvolvimento integrados (IDEs), como o Eclipse, para permitir que os desenvolvedores acessem a documentação dentro do IDE.

Exemplo de Olá, mundo

O programa tradicional Hello world pode ser escrito em Java como: [57]

public  class  HelloWorldApp  {
    public  static  void  main ( String []  args )  {
        Sistema . para fora . println ( "Olá, mundo!" );  // Imprime a string no console.
    }
}

Todos os arquivos de origem devem ser nomeados de acordo com a classe pública que eles contêm, acrescentando o sufixo .java, por exemplo HelloWorldApp.java,. Deve primeiro ser compilado em bytecode, usando um compilador Java , produzindo um arquivo com o .classsufixo ( HelloWorldApp.class, neste caso). Só então ele pode ser executado ou iniciado. O arquivo de origem Java pode conter apenas uma classe pública, mas pode conter várias classes com um modificador de acesso não público e qualquer número de classes internas públicas . Quando o arquivo de origem contém várias classes, é necessário tornar uma classe (introduzida pela classpalavra - chave) pública (precedida pela publicpalavra - chave) e nomear o arquivo de origem com esse nome de classe pública.

Uma classe que não é declarada pública pode ser armazenada em qualquer .javaarquivo. O compilador irá gerar um arquivo de classe para cada classe definida no arquivo de origem. O nome do arquivo de classe é o nome da classe, com .class anexado. Para a geração do arquivo de classe, as classes anônimas são tratadas como se seus nomes fossem a concatenação do nome de sua classe envolvente, um $ e um inteiro.

A palavra-chave public denota que um método pode ser chamado de código em outras classes ou que uma classe pode ser usada por classes fora da hierarquia de classes. A hierarquia de classes está relacionada ao nome do diretório no qual o arquivo .java está localizado. Isso é chamado de modificador de nível de acesso. Outros modificadores de nível de acesso incluem as palavras-chave private(um método que só pode ser acessado na mesma classe) e protected(que permite o acesso ao código do mesmo pacote). Se um trecho de código tentar acessar métodos privados ou métodos protegidos, a JVM lançará umSecurityException

A palavra-chave static[19] na frente de um método indica um método estático , que está associado apenas à classe e não a qualquer instância específica dessa classe. Apenas métodos estáticos podem ser chamados sem uma referência a um objeto. Os métodos estáticos não podem acessar nenhum membro da classe que também não seja estático. Métodos que não são designados como estáticos são métodos de instância e requerem uma instância específica de uma classe para operar.

A palavra-chave voidindica que o método principal não retorna nenhum valor para o chamador. Se um programa Java deve sair com um código de erro, ele deve chamar System.exit()explicitamente.

O nome do método mainnão é uma palavra-chave na linguagem Java. É simplesmente o nome do método que o iniciador Java chama para passar o controle para o programa. As classes Java que são executadas em ambientes gerenciados, como applets e Enterprise JavaBeans , não usam ou precisam de um main()método. Um programa Java pode conter várias classes com mainmétodos, o que significa que a VM precisa ser informada explicitamente de qual classe iniciar.

O método principal deve aceitar uma matriz de Stringobjetos. Por convenção, é referido como argsembora qualquer outro nome de identificador legal possa ser usado. Desde Java 5, o método principal também pode usar argumentos variáveis , na forma de public static void main(String... args), permitindo que o método principal seja chamado com um número arbitrário de Stringargumentos. O efeito dessa declaração alternativa é semanticamente idêntico (ao argsparâmetro que ainda é um array de Stringobjetos), mas permite uma sintaxe alternativa para criar e passar o array.

O iniciador Java inicia o Java carregando uma determinada classe (especificada na linha de comando ou como um atributo em um JAR ) e iniciando seu public static void main(String[])método. Os programas independentes devem declarar esse método explicitamente. O String[] argsparâmetro é uma matriz de Stringobjetos contendo quaisquer argumentos passados ​​para a classe. Os parâmetros para maingeralmente são passados ​​por meio de uma linha de comando .

A impressão é parte de uma biblioteca padrão Java: A Systemclasse define um campo estático público chamado out. O outobjeto é uma instância da PrintStreamclasse e fornece muitos métodos para imprimir dados para padronizar , incluindo o println(String)que também acrescenta uma nova linha à string passada .

A string "Hello World!"é automaticamente convertida em um objeto String pelo compilador.

Exemplo com métodos

// Este é um exemplo de comentário de uma única linha usando duas barras

/ * 
* Este é um exemplo de comentário de várias linhas usando barra e asterisco. 
* Este tipo de comentário pode ser usado para conter muitas informações ou desativar 
* o código, mas é muito importante lembrar de fechar o comentário. 
* /

pacote  fibsandlies ;

import  java.util.Map ; 
import  java.util.HashMap ;

/ ** 
* Este é um exemplo de comentário Javadoc; Javadoc pode compilar documentação 
* a partir deste texto. Os comentários Javadoc devem preceder imediatamente a classe, método 
* ou campo que está sendo documentado. 
* @author Wikipedia Volunteers 
* / 
public  class  FibCalculator  extends  Fibonacci  implementa  Calculator  { 
    private  static  Map < Integer ,  Integer >  memoized  =  new  HashMap <> ();

    / * 
     * O método principal escrito a seguir é usado pela JVM como um ponto de partida 
     * para o programa. 
     * / 
    public  static  void  main ( String []  args )  { 
        memoized . colocar ( 1 ,  1 ); 
        memoized . colocar ( 2 ,  1 ); 
        Sistema . para fora . println ( fibonacci ( 12 ));  // Obtenha o 12º número de Fibonacci e imprima no console 
    }

    / ** 
     * Um exemplo de método escrito em Java, envolvido em uma classe. 
     * Dado um número não negativo FIBINDEX, retorna 
     * o enésimo número de Fibonacci, onde N é igual a FIBINDEX. 
     * 
     * @param fibIndex O índice do número Fibonacci 
     * @return the Fibonacci number 
     * / 
    public  static  int  fibonacci ( int  fibIndex )  { 
        if  ( memoized . containsKey ( fibIndex ))  return  memoized . get ( fibIndex ); 
        else  { 
            int resposta  =  fibonacci ( fibIndex  -  1 )  +  fibonacci ( fibIndex  -  2 ); 
            memoized . colocar ( fibIndex ,  resposta ); 
            resposta de retorno  ; } } }
        
    

Classes especiais

Applet

Os miniaplicativos Java eram programas incorporados em outros aplicativos, geralmente em uma página da Web exibida em um navegador. A API do miniaplicativo Java está obsoleta desde Java 9 em 2017. [58] [59]

Servlet

A tecnologia de servlet Java fornece aos desenvolvedores da Web um mecanismo simples e consistente para estender a funcionalidade de um servidor da Web e acessar os sistemas de negócios existentes. Servlets são componentes Java EE do lado do servidor que geram respostas a solicitações de clientes . Na maioria das vezes, isso significa gerar páginas HTML em resposta a solicitações HTTP , embora haja várias outras classes de servlet padrão disponíveis, por exemplo, para comunicação WebSocket .

A API de servlet Java foi até certo ponto substituída (mas ainda usada nos bastidores) por duas tecnologias Java padrão para serviços da web:

Implementações típicas dessas APIs em servidores de aplicativos ou contêineres de servlet usam um servlet padrão para lidar com todas as interações com as solicitações e respostas HTTP que delegam aos métodos de serviço da web para a lógica de negócios real.

JavaServer Pages

JavaServer Pages (JSP) são componentes Java EE do lado do servidor que geram respostas, normalmente páginas HTML , para solicitações HTTP de clientes . Os JSPs incorporam o código Java em uma página HTML usando os delimitadores especiais <%e %>. Um JSP é compilado para um servlet Java , um aplicativo Java por si só, na primeira vez que é acessado. Depois disso, o servlet gerado cria a resposta. [60]

Aplicação Swing

Swing é uma biblioteca de interface gráfica com o usuário para a plataforma Java SE. É possível especificar uma aparência diferente por meio do sistema de aparência e toque plugável do Swing. Clones do Windows , GTK + e Motif são fornecidos pela Sun. A Apple também oferece uma aparência Aqua para o macOS . Onde as implementações anteriores dessas aparências e sensações podem ter sido consideradas deficientes, o Swing em Java SE 6 aborda esse problema usando mais rotinas de desenho de widget GUI nativas das plataformas subjacentes. [61]

Aplicativo JavaFX

JavaFX é uma plataforma de software para a criação e entrega de aplicativos de desktop , bem como aplicativos ricos da web que podem ser executados em uma ampla variedade de dispositivos. O objetivo do JavaFX é substituir o Swing como a biblioteca GUI padrão do Java SE , mas desde o JDK 11 o JavaFX não está no JDK principal e, em vez disso, em um módulo separado. [62] JavaFX tem suporte para computadores desktop e navegadores da web no Microsoft Windows , Linux e macOS . O JavaFX não oferece suporte para a aparência do sistema operacional nativo. [63]

Genéricos

Em 2004, os genéricos foram adicionados à linguagem Java, como parte do J2SE 5.0. Antes da introdução dos genéricos, cada declaração de variável tinha que ser de um tipo específico. Para classes de contêiner, por exemplo, isso é um problema porque não há uma maneira fácil de criar um contêiner que aceite apenas tipos específicos de objetos. Ou o contêiner opera em todos os subtipos de uma classe ou interface, normalmente Object, ou uma classe de contêiner diferente deve ser criada para cada classe contida. Os genéricos permitem a verificação de tipo em tempo de compilação sem a necessidade de criar muitas classes de contêiner, cada uma contendo código quase idêntico. Além de habilitar um código mais eficiente, certas exceções de tempo de execução são impedidas de ocorrer, emitindo erros de tempo de compilação. Se o Java evitou todos os erros de tipo de tempo de execução (ClassCastExceptions) de ocorrer, seria seguro para o tipo .

Em 2016, o sistema de tipos do Java provou ser incorreto . [64]

Críticas

As críticas dirigidas ao Java incluem a implementação de genéricos, [65] velocidade, [66] o tratamento de números sem sinal, [67] a implementação de aritmética de ponto flutuante, [68] e um histórico de vulnerabilidades de segurança na implementação primária do Java VM HotSpot . [69]

Bibliotecas de classes

A Java Class Library é a biblioteca padrão , desenvolvida para oferecer suporte ao desenvolvimento de aplicativos em Java. Ele é controlado pela Oracle em cooperação com outros por meio do programa Java Community Process . [70] As empresas ou indivíduos que participam deste processo podem influenciar o design e o desenvolvimento das APIs. Esse processo foi objeto de controvérsia durante a década de 2010. [71] A biblioteca de classes contém recursos como:

Documentação

Javadoc é um sistema de documentação abrangente, criado pela Sun Microsystems . Ele fornece aos desenvolvedores um sistema organizado para documentar seu código. Os comentários Javadoc têm um asterisco extra no início, ou seja, os delimitadores são /**e */, enquanto os comentários normais de várias linhas em Java são marcados com os delimitadores /*e */, e os comentários de uma linha começam com a linha //. [75]

Implementações

A Oracle Corporation é a atual proprietária da implementação oficial da plataforma Java SE, após a aquisição da Sun Microsystems em 27 de janeiro de 2010. Essa implementação é baseada na implementação original do Java pela Sun. A implementação do Oracle está disponível para Microsoft Windows (ainda funciona para XP, embora apenas versões posteriores sejam oficialmente suportadas), macOS , Linux e Solaris . Como o Java carece de qualquer padronização formal reconhecida pela Ecma International , ISO / IEC, ANSI ou outras organizações de padrões de terceiros, a implementação do Oracle é o padrão de fato .

A implementação da Oracle é empacotada em duas distribuições diferentes: O Java Runtime Environment (JRE), que contém as partes da plataforma Java SE necessárias para executar programas Java e se destina a usuários finais, e o Java Development Kit (JDK), que é destinado para desenvolvedores de software e inclui ferramentas de desenvolvimento como o compilador Java , Javadoc , Jar e um depurador . A Oracle também lançou o GraalVM , um compilador e interpretador dinâmico Java de alto desempenho.

OpenJDK é outra implementação notável do Java SE licenciada sob a GNU GPL. A implementação começou quando a Sun começou a lançar o código-fonte Java sob a GPL. A partir do Java SE 7, o OpenJDK é a implementação de referência oficial do Java.

O objetivo do Java é tornar todas as implementações de Java compatíveis. Historicamente, a licença de marca comercial da Sun para uso da marca Java insiste em que todas as implementações sejam compatíveis . Isso resultou em uma disputa legal com a Microsoft depois que a Sun alegou que a implementação da Microsoft não era compatível com RMI ou JNI e tinha adicionado seus próprios recursos específicos da plataforma. A Sun entrou com uma ação em 1997 e, em 2001, obteve um acordo de US $ 20 milhões, bem como uma ordem judicial exigindo os termos da licença da Sun. [76] Como resultado, a Microsoft não fornece mais o Java com o Windows .

Java independente de plataforma é essencial para Java EE , e uma validação ainda mais rigorosa é necessária para certificar uma implementação. Este ambiente permite aplicativos portáteis do lado do servidor.

Use fora da plataforma Java

A linguagem de programação Java requer a presença de uma plataforma de software para que os programas compilados sejam executados.

A Oracle fornece a plataforma Java para uso com Java. O Android SDK é uma plataforma de software alternativa, usada principalmente para desenvolver aplicativos Android com seu próprio sistema GUI.

Android

O sistema operacional Android faz uso extensivo de tecnologia relacionada ao Java

A linguagem Java é um pilar fundamental no Android , um sistema operacional móvel de código aberto . Embora o Android, construído no kernel do Linux , seja escrito em grande parte em C, o Android SDK usa a linguagem Java como base para os aplicativos Android, mas não usa nenhum de seus GUI padrão, SE, ME ou outros padrões Java estabelecidos. [77] A linguagem bytecode suportada pelo Android SDK é incompatível com o bytecode Java e roda em sua própria máquina virtual, otimizada para dispositivos de pouca memória, como smartphones e tablets . Dependendo da versão do Android, o bytecode é interpretado pela máquina virtual Dalvikou compilado em código nativo pelo Android Runtime .

O Android não fornece a biblioteca padrão Java SE completa, embora o Android SDK inclua uma implementação independente de um grande subconjunto dela. Suporta Java 6 e alguns recursos do Java 7, oferecendo uma implementação compatível com a biblioteca padrão ( Apache Harmony ).

Controvérsia

O uso de tecnologia relacionada ao Java no Android gerou uma disputa legal entre a Oracle e o Google. Em 7 de maio de 2012, um júri de São Francisco concluiu que, se as APIs podiam ser protegidas por direitos autorais, o Google havia infringido os direitos autorais da Oracle ao usar Java em dispositivos Android. [78] O juiz distrital William Alsup decidiu em 31 de maio de 2012, que APIs não podem ser protegidos por direitos autorais, [79] mas isso foi revertido pelo Tribunal de Apelações dos Estados Unidos para o Circuito Federal em maio de 2014. [80] Em 26 de maio de 2016 , o tribunal distrital decidiu a favor do Google, determinando que a violação de direitos autorais da API Java no Android constitui uso justo. [81]Em março de 2018, essa decisão foi revogada pelo Tribunal de Recursos, que remeteu o processo de determinação dos danos ao tribunal federal de São Francisco. [82] O Google entrou com uma petição de mandado de certiorari com a Suprema Corte dos Estados Unidos em janeiro de 2019 para contestar as duas decisões que foram feitas pelo Tribunal de Apelações em favor da Oracle. [83] Em 5 de abril de 2021, o Tribunal decidiu 6-2 a favor do Google, que seu uso de APIs Java deve ser considerado uso justo . No entanto, o tribunal se recusou a decidir sobre a capacidade de copyright das APIs, preferindo determinar sua decisão considerando a API do Java passível de copyright "puramente para fins de argumentação". [84]

Veja também

Comparação de Java com outros idiomas

Referências

  1. ^ Binstock, Andrew (20 de maio de 2015). “20 anos de inovação em Java” . Forbes . Arquivado do original em 14 de março de 2016 . Recuperado em 18 de março de 2016 .
  2. ^ https://www.oracle.com/java/technologies/downloads/#JDK17 .
  3. ^ a b c d Barbara Liskov com John Guttag (2000). Desenvolvimento de programas em Java - Abstração, Especificação e Design Orientado a Objetos . EUA, Addison Wesley. ISBN 9780201657685.
  4. ^ Chaudhary, Harry H. (28 de julho de 2014). "Cracking the Java Programming Interview :: 2000+ Java Interview Que / Ans" . Recuperado em 29 de maio de 2016 .
  5. ^ Java 5.0 adicionou vários novos recursos de linguagem (o loop for aprimorado , autoboxing , varargs e anotações ), depois que eles foram introduzidos nalinguagem C # semelhante (e concorrente). [1] Arquivado em 19 de março de 2011, na Wayback Machine [2] Arquivado em 7 de janeiro de 2006, na Wayback Machine
  6. ^ Gosling, James; McGilton, Henry (maio de 1996). "O ambiente da linguagem Java" . Arquivado do original em 6 de maio de 2014 . Recuperado em 6 de maio de 2014 .
  7. ^ Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad. "The Java Language Specification, 2nd Edition" . Arquivado do original em 5 de agosto de 2011 . Recuperado em 8 de fevereiro de 2008 .
  8. ^ "O AZ de Linguagens de Programação: Modula-3" . Computerworld.com.au. Arquivado do original em 5 de janeiro de 2009 . Recuperado em 9 de junho de 2010 .
  9. ^ Niklaus Wirth declarou em uma série de ocasiões públicas, por exemplo, em uma palestra no Museu Politécnico de Moscou em setembro de 2005 (existem vários relatos de primeira mão independentes em russo, por exemplo, um com uma gravação de áudio: Filippova, Elena (22 de setembro de 2005) ). "Palestra de Niklaus Wirth no Museu Politécnico de Moscou" . Arquivado do original em 1 de dezembro de 2020. Recuperado em 20 de novembro de 2011 .), que a equipe de design do Sun Java licenciou as fontes do compilador Oberon vários anos antes do lançamento do Java e o examinou: a compacidade (relativa), segurança de tipo, coleta de lixo, sem herança múltipla para classes - todos esses designs gerais importantes recursos são compartilhados por Java e Oberon.
  10. ^ Patrick Naughton cita Objective-C como uma forte influência no design da linguagem de programação Java, afirmando que derivados diretos notáveis ​​incluem interfaces Java (derivadas do protocolo Objective-C) e classes de wrapper primitivas. [3] Arquivado em 13 de julho de 2011, na Wayback Machine
  11. ^ TechMetrix Research (1999). "História do Java" (PDF) . Relatório de servidores de aplicativos Java . Arquivado do original (PDF) em 29 de dezembro de 2010. O projeto avançou com o nome verde e a linguagem foi baseada em um antigo modelo de UCSD Pascal , que possibilita a geração de código interpretativo.
  12. ^ "Uma conversa com James Gosling - ACM Queue" . Queue.acm.org. 31 de agosto de 2004. Arquivado do original em 16 de julho de 2015 . Recuperado em 9 de junho de 2010 .
  13. ^ No verão de 1996, a Sun estava projetando o precursor do que agora é o modelo de evento da arquitetura de componentes AWT e JavaBeans. A Borland contribuiu muito para esse processo. Observamos com muito cuidado o Delphi Object Pascal e construímos um protótipo funcional de referências de método vinculado para entender sua interação com a linguagem de programação Java e suas APIs. White Paper sobre os delegados da Microsoft
  14. ^ "Especificações da capela (Agradecimentos)" (PDF) . Cray Inc. 1º de outubro de 2015. Arquivado (PDF) do original em 5 de fevereiro de 2016 . Recuperado em 14 de janeiro de 2016 .
  15. ^ "Introdução à documentação do Gambas" . Site do Gambas. Arquivado do original em 9 de outubro de 2017 . Recuperado em 9 de outubro de 2017 .
  16. ^ "Facebook Q&A: Hack traz a digitação estática para o mundo do PHP" . InfoWorld . 26 de março de 2014. Arquivado do original em 13 de fevereiro de 2015 . Recuperado em 11 de janeiro de 2015 .
  17. ^ "Escreva uma vez, execute em qualquer lugar?" . Computer Weekly . 2 de maio de 2002. Arquivado do original em 13 de agosto de 2021 . Recuperado em 27 de julho de 2009 .
  18. ^ a b c "1.2 Objetivos de design da linguagem de programação Java ™" . Oráculo. 1º de janeiro de 1999. Arquivado do original em 23 de janeiro de 2013 . Recuperado em 14 de janeiro de 2013 .
  19. ^ a b McMillan, Robert (1º de agosto de 2013). "O Java está perdendo seu poder?" . wired.com . Arquivado do original em 15 de fevereiro de 2017 . Recuperado em 8 de março de 2017 . Java está em declínio, pelo menos de acordo com uma empresa que mantém os olhos no mundo em constante mudança das linguagens de programação de computador. Por mais de uma década, ele dominou o Índice da Comunidade de Programação TIOBE e está de volta ao topo - um instantâneo do entusiasmo do desenvolvedor de software que olha para coisas como resultados de pesquisa na Internet para medir a quantidade de buzz que diferentes linguagens têm. Mas, ultimamente, o Java tem escorregado.
  20. ^ Chan, Rosalie (22 de janeiro de 2019). “As 10 linguagens de programação mais populares, segundo o 'Facebook para programadores ' . Business Insider . Arquivado do original em 29 de junho de 2019 . Recuperado em 29 de junho de 2019 .
  21. ^ "JavaOne 2013 Review: Java assume a Internet das coisas" . www.oracle.com . Arquivado do original em 19 de abril de 2016 . Recuperado em 19 de junho de 2016 . URL alternativo
  22. ^ "Por que devo desinstalar versões anteriores do Java do meu sistema?" . Oráculo. Arquivado do original em 12 de fevereiro de 2018 . Recuperado em 24 de setembro de 2021 .
  23. ^ Byous, Jon (C. 1998). "Tecnologia Java: os primeiros anos" . Sun Developer Network . Sun Microsystems . Arquivado do original em 20 de abril de 2005 . Recuperado em 22 de abril de 2005 .
  24. ^ Programação orientada a objetos "A História da Tecnologia Java" . Sun Developer Network . c. 1995. Arquivado do original em 10 de fevereiro de 2010 . Recuperado em 30 de abril de 2010 .
  25. ^ Murphy, Kieron (4 de outubro de 1996). "Então, por que eles decidiram chamá-lo de Java?" . JavaWorld . Arquivado do original em 13 de julho de 2020 . Página visitada em 2020-07-13 .
  26. ^ Kabutz, Heinz; Once Upon an Oak Arquivado em 13 de abril de 2007, na Wayback Machine . Artima. Recuperado em 29 de abril de 2007.
  27. ^ "JAVASOFT SHIPS JAVA 1.0" . Arquivado do original em 10 de março de 2007 . Recuperado em 13 de maio de 2018 .
  28. ^ Programação orientada a objetos com Java: Essentials and Applications . Educação Tata McGraw-Hill. p. 34
  29. ^ "JSG - Grupo de estudo Java" . open-std.org . Arquivado do original em 25 de agosto de 2006 . Recuperado em 2 de agosto de 2006 .
  30. ^ "Por que o Java ™ não foi padronizado duas vezes" (PDF) . Arquivado (PDF) do original em 13 de janeiro de 2014 . Recuperado em 3 de junho de 2018 .
  31. ^ "O que é ECMA - e por que a Microsoft se preocupa" . Arquivado do original em 6 de maio de 2014 . Recuperado em 6 de maio de 2014 .
  32. ^ "Site do Java Community Process" . Jcp.org. 24 de maio de 2010. Arquivado do original em 8 de agosto de 2006 . Recuperado em 9 de junho de 2010 .
  33. ^ "JAVAONE: Sun - a maior parte do Java é de código aberto" . GrnLight.net. Arquivado do original em 27 de maio de 2014 . Recuperado em 26 de maio de 2014 .
  34. ^ "O papel em evolução da Sun como evangelista de Java" . O'Reilly Media . Arquivado do original em 15 de setembro de 2010 . Recuperado em 2 de agosto de 2009 .
  35. ^ "Oracle e Java" . oracle.com . Oracle Corporation. Arquivado do original em 31 de janeiro de 2010 . Recuperado em 23 de agosto de 2010 . A Oracle tem sido um grande apoiador do Java desde seu surgimento em 1995 e assume o novo papel como administrador da tecnologia Java com um compromisso implacável de promover uma comunidade de participação e transparência.
  36. ^ Gosling, James (9 de abril de 2010). "Hora de seguir em frente ..." Em uma nova estrada . Arquivado do original em 5 de novembro de 2010 . Recuperado em 16 de novembro de 2011 .
  37. ^ Tópico, Dalibor. "Mudando para uma Web sem plug-ins" . Arquivado do original em 16 de março de 2016 . Recuperado em 15 de março de 2016 .
  38. ^ "Saiba mais sobre a tecnologia Java" . Oráculo. Arquivado do original em 24 de novembro de 2011 . Recuperado em 21 de novembro de 2011 .
  39. ^ "Roteiro de suporte Oracle Java SE" . Oráculo. 13 de setembro de 2021 . Recuperado em 18 de setembro de 2021 .
  40. ^ "JAVASOFT SHIPS JAVA 1.0" . sun.com . Arquivado do original em 10 de março de 2007 . Recuperado em 5 de fevereiro de 2008 .
  41. ^ Chander, Sharat. "Apresentando o Java SE 11" . oracle.com . Arquivado do original em 26 de setembro de 2018 . Recuperado em 26 de setembro de 2018 .
  42. ^ "A chegada do Java 15!" . Oracle . 15 de setembro de 2020. Arquivado do original em 16 de setembro de 2020 . Recuperado em 15 de setembro de 2020 .
  43. ^ "Visão geral do Java Card" . Rede de Tecnologia Oracle . Oráculo. Arquivado do original em 7 de janeiro de 2015 . Recuperado em 18 de dezembro de 2014 .
  44. ^ "Plataforma Java, Micro Edition (Java ME)" . Rede de Tecnologia Oracle . Oráculo. Arquivado do original em 4 de janeiro de 2015 . Recuperado em 18 de dezembro de 2014 .
  45. ^ "Java SE" . Rede de Tecnologia Oracle . Oráculo. Arquivado do original em 24 de dezembro de 2014 . Recuperado em 18 de dezembro de 2014 .
  46. ^ "Plataforma Java, Enterprise Edition (Java EE)" . Rede de Tecnologia Oracle . Oráculo. Arquivado do original em 17 de dezembro de 2014 . Recuperado em 18 de dezembro de 2014 .
  47. ^ "A plataforma JVM (Java Virtual Machine) é dependente ou independente da plataforma? Qual é a vantagem de usar a JVM e ter o Java como uma linguagem traduzida?" . Entrevista com o programador. Arquivado do original em 19 de janeiro de 2015 . Recuperado em 19 de janeiro de 2015 .
  48. ^ Jelovic, Dejan. "Por que Java sempre será mais lento que C ++" . Arquivado do original em 11 de fevereiro de 2008 . Recuperado em 15 de fevereiro de 2008 .
  49. ^ Google. "Reconhecimento de Loop em C ++ / Java / Go / Scala" (PDF) . Arquivado (PDF) do original em 16 de novembro de 2011 . Recuperado em 12 de julho de 2012 .
  50. ^ "Compilador Java Just-In-Time da Symantec a ser integrado ao Sun JDK 1.1" . Arquivado do original em 28 de junho de 2010 . Recuperado em 1 de agosto de 2009 .
  51. ^ Salcic, Zoran; Park, Heejong; Teich, Jürgen; Malik, Avinash; Nadeem, Muhammad (22 de julho de 2017). "Noc-HMP: um processador multicore heterogêneo para sistemas incorporados projetados no SystemJ". Transações ACM em Automação de Projetos de Sistemas Eletrônicos . 22 (4): 73. doi : 10.1145 / 3073416 . ISSN 1084-4309 . S2CID 11150290 .  
  52. ^ "NullPointerException" . Oráculo. Arquivado do original em 6 de maio de 2014 . Recuperado em 6 de maio de 2014 .
  53. ^ "Exceções em Java" . Artima.com. Arquivado do original em 21 de janeiro de 2009 . Recuperado em 10 de agosto de 2010 .
  54. ^ "Melhorias de desempenho da máquina virtual Java HotSpot ™" . Oracle.com. Arquivado do original em 29 de maio de 2017 . Recuperado em 26 de abril de 2017 .
  55. ^ "Sobrecarga de operador (C # vs Java)" . C # para desenvolvedores Java . Microsoft. Arquivado do original em 7 de janeiro de 2015 . Recuperado em 10 de dezembro de 2014 .
  56. ^ "Herança múltipla de estado, implementação e tipo" . Os tutoriais Java ™ . Oráculo. Arquivado do original em 9 de novembro de 2014 . Recuperado em 10 de dezembro de 2014 .
  57. ^ "Lição: Uma análise mais detalhada do aplicativo Hello World" . Os tutoriais Java ™> Introdução . Oracle Corporation . Arquivado do original em 17 de março de 2011 . Recuperado em 14 de abril de 2011 .
  58. ^ "APIs, recursos e opções obsoletos" . Oráculo. Arquivado do original em 19 de junho de 2019 . Recuperado em 31 de maio de 2019 .
  59. ^ "Applet (Java Platform SE 7)" . Docs . Oráculo. Arquivado do original em 2 de agosto de 2020 . Recuperado em 1 de maio de 2020 .
  60. ^ "O que é uma página JSP? - O tutorial Java EE 5" . docs.oracle.com . Arquivado do original em 2 de agosto de 2020 . Recuperado em 1 de maio de 2020 .
  61. ^ "Trilha: Criando uma GUI com JFC / Swing (Tutoriais Java ™)" . docs.oracle.com . Arquivado do original em 29 de abril de 2020 . Recuperado em 1 de maio de 2020 .
  62. ^ "Removido do JDK 11, o JavaFX 11 chega como um módulo independente" . InfoWorld . Arquivado do original em 14 de outubro de 2020 . Recuperado em 13 de outubro de 2020 .
  63. ^ "Introdução ao JavaFX: Hello World, JavaFX Style" . Tutoriais e documentação do JavaFX 2 . Oráculo. Arquivado do original em 2 de agosto de 2020 . Recuperado em 1 de maio de 2020 .
  64. ^ "Java and Scala's Type Systems are Unsound" (PDF) . Arquivado (PDF) do original em 28 de novembro de 2016 . Recuperado em 20 de fevereiro de 2017 .
  65. ^ Arnold, Ken. "Genéricos considerados prejudiciais" . java.net. Arquivado do original em 10 de outubro de 2007 . Recuperado em 10 de setembro de 2015 . Mais comentários sobre o artigo original disponíveis em instantâneos de arquivo anteriores.
  66. ^ Jelovic, Dejan. "Por que o Java sempre será mais lento que o C ++" . www.jelovic.com. Arquivado do original em 11 de fevereiro de 2008 . Recuperado em 17 de outubro de 2012 .
  67. ^ Owens, Sean R. "Java e unsigned int, unsigned short, unsigned byte, unsigned long, etc. (Ou melhor, a falta deles)" . Arquivado do original em 20 de fevereiro de 2009 . Recuperado em 4 de julho de 2011 .
  68. ^ Kahan, William. "Como o ponto flutuante do Java prejudica todo mundo em todos os lugares" (PDF) . Engenharia Elétrica e Ciência da Computação, Universidade da Califórnia em Berkeley. Arquivado (PDF) do original em 5 de setembro de 2012 . Recuperado em 4 de junho de 2011 .
  69. ^ "Você verificou o Java?" . Arquivado do original em 21 de setembro de 2012 . Recuperado em 23 de dezembro de 2011 .
  70. ^ Cadenhead, Rogers (20 de novembro de 2017), Understanding How Java Programs Work , arquivado do original em 13 de agosto de 2021 , recuperado em 26 de março de 2019
  71. ^ Woolf, Nicky (26 de maio de 2016). "O Google venceu a batalha legal de seis anos com a Oracle sobre os direitos autorais do código do Android" . The Guardian . ISSN 0261-3077 . Arquivado do original em 26 de março de 2019 . Recuperado em 26 de março de 2019 . 
  72. ^ "Visão geral da estrutura das coleções" . Documentação Java . Oráculo. Arquivado do original em 31 de dezembro de 2014 . Recuperado em 18 de dezembro de 2014 .
  73. ^ "Visão geral da segurança Java ™" . Documentação Java . Oráculo. Arquivado do original em 3 de janeiro de 2015 . Recuperado em 18 de dezembro de 2014 .
  74. ^ "Trilha: Internacionalização" . Os tutoriais Java ™ . Oráculo. Arquivado do original em 31 de dezembro de 2014 . Recuperado em 18 de dezembro de 2014 .
  75. ^ "Como escrever comentários de documentos para a ferramenta Javadoc" . Rede de Tecnologia Oracle . Oráculo. Arquivado do original em 18 de dezembro de 2014 . Recuperado em 18 de dezembro de 2014 .
  76. ^ Niccolai, James (24 de janeiro de 2001). "Sun, Microsoft resolvem ação judicial sobre Java" . JavaWorld . Serviço de notícias IDG . Arquivado do original em 14 de julho de 2020 . Página visitada em 2020-07-13 .
  77. ^ van Gurp, Jilles (13 de novembro de 2007). "Google Android: impressões iniciais e críticas" . Javalobby . Arquivado do original em 28 de agosto de 2008 . Recuperado em 7 de março de 2009 . Francamente, não entendo por que o Google pretende ignorar a grande quantidade de implementações existentes por aí. Parece um caso grave de "não inventado aqui" para mim. Em última análise, isso retardará a adoção. Já existem muitas plataformas Java para o mundo móvel e esta é mais uma
  78. ^ Mullin, Joe. "Google é culpado de infração no julgamento da Oracle; futuras dores de cabeça legais se aproximam" . Lei e desordem . Ars Technica. Arquivado do original em 8 de maio de 2012 . Recuperado em 8 de maio de 2012 .
  79. ^ Mullin, Joe (31 de maio de 2012). "Google ganha decisão de API crucial, caso da Oracle dizimado" . Ars Technica . Arquivado do original em 12 de março de 2017 . Retirado em 1 de junho de 2012 .
  80. ^ Rosenblatt, Seth (9 de maio de 2014). "Tribunal fica do lado da Oracle sobre o Android no recurso de patente do Java" . CNET . Arquivado do original em 10 de maio de 2014 . Recuperado em 10 de maio de 2014 .
  81. ^ Mullin, Joe (26 de maio de 2016). "Google vence Oracle - Android faz" uso justo "de APIs Java" . Ars Technica . Arquivado do original em 20 de janeiro de 2017 . Recuperado em 26 de maio de 2016 .
  82. ^ Farivar, Cyrus (27 de março de 2018). " " O uso de pacotes de API Java pelo Google não foi justo, "regras do tribunal de apelação" . Ars Technica . Arquivado do original em 24 de setembro de 2019 . Recuperado em 6 de agosto de 2019 .
  83. ^ Lee, Timothy (23 de abril de 2019). "O Google pede que a Suprema Corte anule a decisão desastrosa sobre os direitos autorais da API" . Ars Technica . Arquivado do original em 23 de abril de 2019 . Recuperado em 23 de abril de 2019 .
  84. ^ " Google LLC v. Oracle America, Inc 593 US ____ (2021)" (PDF) . Arquivado (PDF) do original em 5 de abril de 2021 . Recuperado em 6 de abril de 2021 .

Trabalhos citados

Ligações externas

  • A definição do dicionário de Java no Wikcionário
  • Mídia relacionada a Java no Wikimedia Commons
  • Programação Java em Wikibooks
  • Materiais de aprendizagem relacionados a Java na Wikiversidade