Java (linguagem de programação) - Java (programming language)


Da Wikipédia, a enciclopédia livre

Java
Java logo.svg linguagem de programação
Paradigma Multi-paradigma : orientada a objetos ( classe base ), estruturada , imperativa , genérico , reflexivo , concorrente
Projetado por James Gosling
Desenvolvedor Sun Microsystems (agora propriedade da Oracle Corporation )
Apareceu pela primeira vez 23 de maio de 1995 ; 23 anos atrás ( 1995/05/23 )
disciplina Typing Estática, forte, segura , nominativas , manifesto
Licença GNU General Public License , Java Community Process
extensões de arquivo .java, .class , .jar
Local na rede Internet oráculo .com / java /
grandes implementações
Compiladores: OpenJDK (javac, sjavac), GCJ (GCJ), Eclipse Compiler para Java (ECJ)
As máquinas virtuais: OpenJDK JRE, o Oracle JRockit , Azul Zing , IBM J9 , Excelsior JET , Gluon VM, Microsoft JVM , Apache Harmony
compiladores JIT: hotSpot , GraalVM , Azul Falcon (LLVM)
dialetos
Java genérico , Pizza
Influenciado por
Ada 83 , C ++ , C # , Eiffel , Java genérico , Mesa , Modula-3 , Oberon , Objective-C , UCSD Pascal , Object Pascal
Influenciado
Ada 2005 , BeanShell , C # , Capela , Clojure , ECMAScript , Fantom , Gambas , Groovy , corte , Haxe , J # , JavaScript , Kotlin , PHP , Python , Scala , Seed7 , Vala

Java é uma de uso geral linguagem de computador-programação que é concorrente , baseada em classes , orientada a objeto , e, especificamente projetado para ter o menor número de dependências de implementação quanto possível. Destina-se a permitir que os desenvolvedores de aplicativos " write once, run anywhere " (WORA), o que significa que compilou o código Java pode ser executado em todas as plataformas que suportam Java sem a necessidade de recompilação. As aplicações Java são tipicamente compiladas para bytecode que pode rodar em qualquer máquina virtual Java (JVM), independentemente da arquitetura de computador . A partir de 2016, Java é uma das mais populares linguagens de programação em uso , especialmente para aplicações web cliente-servidor, com uma relatados 9 milhões de desenvolvedores. Java foi originalmente desenvolvido por James Gosling na Sun Microsystems (que já foi adquirida pela Oracle Corporation ) e lançado em 1995 como um componente central da Sun Microsystems plataforma Java . A linguagem deriva muito de sua sintaxe de C e C ++ , mas tem menos de baixo nível instalações do que qualquer um deles.

O original e implementação de referência Java compiladores , máquinas virtuais e bibliotecas de classe foram originalmente lançado pela Sun sob licenças proprietárias. Em maio de 2007, em conformidade com as especificações do Java Community Process , Sun relicensed maioria de suas tecnologias Java sob a GNU General Public License . Outros também têm desenvolvido implementações alternativas destas tecnologias da Sun, como o GCJ (compilador bytecode), GNU Classpath (bibliotecas padrão), e IcedTea -Web (plugin para o navegador para applets).

A última versão é Java 11 , lançado em 25 de Setembro de 2018, que segue Java 10 depois de apenas seis meses, em linha com o novo cronograma de lançamento. Java 8 ainda é suportado, mas não haverá atualizações de segurança mais para Java 9. Versões anteriores a Java 8 são apoiados por empresas numa base comercial; por exemplo, a Oracle volta para Java 6 a partir de 2017 de Outubro (enquanto eles ainda "altamente recomendável que você desinstalar" pré-Java 8 de pelo menos computadores com Windows).

História

Duke, o mascote de Java
James Gosling , o criador do Java, em 2008
O TIOBE linguagem de programação índice de popularidade gráfico, de 2002 a 2018. Ao longo de uma década, Java (azul) e C (preto) competiu para a primeira posição.

James Gosling , Mike Sheridan, e Patrick Naughton iniciou o projeto de linguagem Java em junho de 1991. Java foi originalmente concebido para a televisão interativa, mas era muito avançada para a indústria de televisão a cabo digital no momento. A linguagem foi inicialmente chamado Oak depois de um carvalho árvore que ficava fora do escritório de Gosling. Mais tarde, o projeto passou pelo nome verde e finalmente foi renomeado Java , de café Java . Gosling projetado Java com um C / C ++ - sintaxe estilo que sistema e de aplicativos programadores iria encontrar familiar.

Sun Microsystems lançou a primeira implementação público como Java 1.0 em 1996. Ele prometeu "wora" (WORA), desde que não haja custo vezes executados em populares plataformas . Segurança configurável bastante seguro e apresentando, permitiu restrições de rede e de acesso a arquivos. Principais navegadores em breve incorporada a capacidade de executar applets Java dentro de páginas web e Java rapidamente se tornou popular. O 1.0 do compilador Java foi re-escrito em Java por Arthur van Hoff em cumprir rigorosamente a especificação da linguagem Java 1.0. Com o advento do Java 2 (lançado inicialmente como J2SE 1.2 em dezembro 1998-1999), novas versões tiveram várias configurações construídas para diferentes tipos de plataformas. J2EE incluído tecnologias e APIs para aplicações empresariais normalmente são executados em ambientes de servidores, enquanto J2ME destaque APIs otimizados para aplicações móveis. A versão desktop foi renomeado J2SE . Em 2006, para fins de marketing, Sun renomeado novas J2 versões como Java EE , Java ME e Java SE , respectivamente.

Em 1997, a Sun Microsystems se aproximou do / IEC JTC 1 ISO corpo de padrões e mais tarde a Ecma International para formalizar Java, mas logo se retirou do processo. Java continua a ser um de facto padrão , controlado através do Java Community Process . Ao mesmo tempo, a Sun fez a maioria de suas implementações de Java disponíveis sem custo, apesar de seu software proprietário status. Sun gerou uma receita de Java através 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 GNU General Public License (GPL). Em 8 de maio de 2007, Sun terminado o processo, fazendo com que todo o seu código do núcleo do JVM disponível sob software livre / termos de distribuição open-source, além de uma pequena parte do código para que a Sun não possui os direitos autorais.

Vice-presidente da Sun Rich Green disse que o papel ideal da Sun em relação a Java foi como um "evangelista". Após Oracle Corporation aquisição 's da Sun Microsystems em 2009-10, a Oracle descreveu-se como o 'mordomo da tecnologia Java com um compromisso incansável para promover uma comunidade de participação e transparência'. Isso não impediu que a Oracle a partir de uma ação judicial contra o Google logo depois disso para usar Java no interior do Android SDK (ver secção Google abaixo). Software Java é executado em tudo, desde laptops para centros de dados , consolas de jogos para científicos supercomputadores . Em 2 de abril de 2010, James Gosling demitiu do Oracle.

Em janeiro de 2016, a Oracle anunciou que os ambientes de tempo de execução Java baseados em JDK 9 irá descontinuar o plugin para o navegador.

Princípios

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

  1. Ele deve ser "simples, orientada a objetos e familiar".
  2. Deve ser "robusto e seguro".
  3. Deve ser "arquitetura neutra e portátil".
  4. Ele deve executar com "alta performance".
  5. Ele deve ser "interpretado, rosca, e dinâmica".

versões

Como de 20 de Março de 2018, ambos Java 8 e 11 são suportados oficialmente. Principais versões de lançamento de Java, junto com suas datas de lançamento:

  • JDK 1,0 (23 Janeiro, 1996)
  • JDK 1.1 (19 de fevereiro, 1997)
  • J2SE 1,2 (8 Dezembro, 1998)
  • J2SE 1,3 (8 de Maio, 2000),
  • J2SE 1.4 (06 de fevereiro de 2002)
  • J2SE 5.0 (30 setembro de 2004)
  • Java SE 6 (11 dezembro de 2006)
  • Java SE 7 (28 de Julho de 2011)
  • Java SE 8 (março 18, 2014)
  • Java SE 9 (21 de setembro de 2017)
  • Java SE 10 (20 mar 2018)
  • Java SE 11 (25 de setembro de 2018)

edições

Sun definiu e suporta quatro edições do Java visando ambientes de aplicação diferentes e segmentado muitas de suas APIs para que eles pertencem a uma das plataformas. As plataformas são:

As aulas nas APIs Java são organizados em grupos separados chamados pacotes . Cada pacote contém um conjunto de relacionados de interfaces , classes e exceções . Consulte as plataformas separadas para uma descrição dos pacotes disponíveis.

Sun também forneceu uma edição chamada PersonalJava que foi substituído pelo mais tarde, baseados em padrões Java ME configuração de perfil pares.

Sistema de execução

Java JVM e Bytecode

Um objetivo do projeto de Java é a portabilidade, o que significa que programas escritos para a plataforma Java deve ser executado da mesma forma em qualquer combinação de hardware e sistema operacional com suporte a execução adequada. Isto é conseguido através da compilação do código de linguagem Java para uma representação intermediária chamada bytecode Java , em vez de diretamente para uma arquitetura específica código de máquina . Instruções de bytecode Java são análogos ao código de máquina, mas eles têm a intenção de ser executado por um máquina virtual (VM), escrito especificamente para o hardware host. Os usuários finais normalmente usam um Java Runtime Environment (JRE) instalado em sua própria máquina para aplicativos Java independentes, ou em um navegador da web para Java applets .

Bibliotecas padrão fornecem uma maneira genérica para acessar recursos específicos do hospedeiro, tais como gráficos, rosqueamento , e networking .

O uso de bytecode universal faz portar simples. No entanto, a sobrecarga de interpretar bytecode em instruções de máquina feita interpretado programas quase sempre executar mais lentamente do que nativos executáveis . Just-in-time (JIT) compiladores que compilam bytecodes para código de máquina durante a execução foram introduzidas desde a fase inicial. Próprio Java é independente de plataforma e é adaptado para a plataforma particular, é para ser executado por uma máquina virtual Java para ele, o que traduz o bytecode Java em linguagem de máquina da plataforma.

atuação

Programas escritos em Java tem uma reputação de ser mais lento e que exige mais memória do que aqueles escritos em C ++. No entanto, a velocidade de execução de programas Java melhorou significativamente com a introdução de compilação just-in-time em 1997/1998 para Java 1.1 , a adição de recursos de linguagem que suportam melhor análise de código (como classes internas, a classe StringBuilder, afirmações opcionais, etc. .), e otimizações na máquina virtual Java, como HotSpot se tornando o padrão para JVM da Sun em 2000. com Java 1.5, o desempenho foi melhorado com a adição do pacote java.util.concurrent, incluindo livres de bloqueio implementações dos ConcurrentMaps e outras colecções de vários núcleos, e que foi melhorado ainda mais com Java 1.6.

Não JVM

Algumas plataformas oferecem suporte de hardware direto para Java; há microcontroladores que podem ser executados bytecode Java em hardware em vez de um software de máquina virtual Java, e alguns ARM processadores baseados poderia ter suporte de hardware para executar bytecode Java através da sua Jazelle opção, embora o apoio foi em grande parte caiu em implementações atuais da ARM.

gerenciamento automático de memória

Java usa um coletor de lixo automático para gerenciar memória no ciclo de vida do objeto . O programador determina quando os objetos são criados, e o tempo de execução Java é responsável pela recuperação da memória uma vez objetos não estão mais em uso. Uma vez que nenhuma referência a um objeto permanecer, a memória inacessível torna-se elegível para ser liberado 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ária, normalmente quando os objetos que não são mais necessários são armazenados em recipientes que ainda estão em uso. Se métodos para um objeto inexistente são chamados, uma "exceção de ponteiro nulo" é lançada.

Uma das idéias por trás do modelo de gestão de memória automática do Java é que os programadores podem ser poupado do fardo de ter que executar o gerenciamento de memória manual. Em alguns idiomas, memória para a criação de objetos é alocado de forma implícita na pilha ou explicitamente alocada e desalocada do montão . Neste último caso, a responsabilidade de gerir a memória reside com o programador. Se o programa não desalocar um objeto, um vazamento de memória ocorre. Se o programa tenta acessar ou desalocar memória que já foi desalocado, o resultado é indefinido e difícil de prever, e o programa é susceptível de se tornar instável ou acidente. Isto pode ser parcialmente remediado pelo uso de ponteiros inteligentes , mas estes adicionar sobrecarga e complexidade. Note-se que a coleta de lixo não impede vazamentos de memória "lógicas", ou seja , aqueles em que a memória ainda é referenciado, mas nunca utilizado.

A coleta de lixo pode acontecer a qualquer momento. Idealmente, ele irá ocorrer quando um programa está ocioso. É garantido para ser acionado se houver insuficiente memória livre na pilha para alocar um novo objeto; isso pode causar um programa para parar momentaneamente. gerenciamento explícito de memória não é possível em Java.

Java não suportam C estilo / C ++ aritmética de ponteiro , onde os endereços de objetos e inteiros sem sinal (geralmente longos inteiros) podem ser usados alternadamente. Isso permite que o coletor de lixo para realocar objetos referenciados e garante a segurança e segurança tipo.

Tal como no C ++ e alguns outros idiomas orientada por objectos, características variáveis dos de Java tipos de dados primitivos são armazenados directamente em campos (por objectos) ou sobre a pilha (por métodos) em vez de sobre a pilha, como é geralmente verdadeiro para dados não-primitivo tipos (mas ver escapar análise ). Esta foi uma decisão consciente por designers de Java por motivos de desempenho.

Java contém vários tipos de coletores de lixo. Por padrão, o HotSpot usa o coletor de lixo scavenge paralelo . No entanto, há também vários outros coletores de lixo que podem ser usados para gerenciar o heap. Para 90% das aplicações em Java, o Concurrent Mark-varredura coletor de lixo (CMS) é suficiente. A Oracle pretende substituir CMS com o coletor de lixo-First (G1).

Sintaxe

Dependência gráfico das classes Java núcleo (criado com jdeps e Gephi ). As classes mais utilizadas Objeto e Cordas aparecer no centro do diagrama.

A sintaxe de Java é fortemente influenciada pelo C ++ . Ao contrário de C ++, que combina a sintaxe para estruturado, genérico, e programação orientada a objetos, Java foi construído quase exclusivamente como uma linguagem orientada a objetos. Todo o código é escrito no interior aulas, e cada item de dados é um objecto, com a excepção dos tipos de dados primitivos, ( isto é, números inteiros, números de ponto flutuante, valores booleanos , e caracteres), que não são objectos por razões de desempenho. Java reutiliza alguns aspectos populares do C ++ (como o printfmétodo).

Ao contrário de C ++, Java não suporta a sobrecarga de operador ou herança múltipla de aulas , apesar de herança múltipla é suportada para as interfaces .

Java usa comentários semelhantes aos de C ++. Existem três estilos diferentes de comentários: um único estilo linha marcada com duas barras ( //), um estilo de linha múltipla abertos com /*e fechadas com */, eo Javadoc estilo comentando abertos com /**e fechadas com */. O estilo Javadoc de comentar permite que o usuário execute o arquivo executável Javadoc para criar documentação para o programa e pode ser lido por alguns ambientes de desenvolvimento integrado (IDEs), como Eclipse para permitir aos desenvolvedores acessar a documentação dentro do IDE.

"Olá, mundo" exemplo

O tradicional "Olá, mundo!" programa pode ser escrito em Java como:

class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Prints the string to the console.
    }
}

Arquivos de origem deve ser nomeado após a classe pública que eles contêm, acrescentando o sufixo .java, por exemplo, HelloWorldApp.java. Ele deve primeiro ser compilados em bytecode, usando um compilador Java , produzindo um arquivo chamado HelloWorldApp.class. Só então ele pode ser executado, ou "lançado". O arquivo de origem Java só pode conter uma classe pública, mas pode conter várias classes com excepção modificador de acesso público e qualquer número de públicos classes internas . Quando o arquivo de origem contém várias classes, faça uma classe "público" e o nome do arquivo de origem com esse nome classe pública.

Um classque não é declarado publicpode ser armazenada em qualquer arquivo .java. 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 anexas. Para a geração de arquivo de classe, classes anônimas são tratados como se seu nome fosse a concatenação do nome de sua classe delimitador, a $ , e um inteiro.

A palavra-chave public denota que um método pode ser chamado a partir do código em outras classes, ou que uma classe pode ser usado pelas classes fora da hierarquia de classes. A hierarquia de classes está relacionado com o nome do diretório no qual o arquivo .java está localizado. Isso é chamado de um modificador de nível de acesso. Outros modificadores de nível de acesso incluem as palavras-chave privatee protected.

A palavra-chave staticna frente de um método indica um método estático , a qual está associada apenas com a classe e não com qualquer instância específica dessa classe. Apenas métodos estáticos pode ser invocado sem uma referência a um objeto. Os métodos estáticos não podem acessar quaisquer membros da classe que não são também estática. Métodos que não são designados estática são métodos de instância e exigem uma instância específica de uma classe para operar.

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

O nome do método " main" não é uma palavra-chave na linguagem Java. É simplesmente o nome do método o lançador de Java chama para passar o controle para o programa. Classes Java que são executados 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 que têm mainmétodos, o que significa que a VM precisa ser dito explicitamente qual classe para lançar a partir.

O método principal deve aceitar uma variedade de Stringobjectos. Por convenção, é referenciado como argsembora qualquer outro nome identificador legal pode ser utilizada. Desde Java 5, o principal método também pode usar argumentos variáveis , na forma de public static void main(String... args), permitindo que o método principal para ser chamado com um número arbitrário de Stringargumentos. O efeito da referida declaração alternativo é idêntico semanticamente (para o argsparâmetro que é ainda uma disposição de Stringobjectos), mas permite que uma sintaxe alternativa para criar e passando a matriz.

O lançador de Java lança Java por carregamento de uma dada classe (especificado na linha de comando ou como um atributo num JAR ) e iniciar o seu public static void main(String[])método. Stand-alone programas deve declarar esse método explicitamente. O String[] argsparâmetro é uma matriz de Stringobjectos contendo quaisquer argumentos passados para a classe. Os parâmetros a mainmuitas vezes 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 outobjecto é uma instância da PrintStreamclasse e fornece muitos métodos para a impressão de dados de padrão para fora , incluindo os println(String)que também acrescenta uma nova linha para a cadeia transmitida.

A string "Olá mundo!" é automaticamente convertido para um objeto String pelo compilador.

Exemplo com métodos

// This is an example of a single line comment using two slashes

/* This is an example of a multiple line comment using the slash and asterisk.
 This type of comment can be used to hold a lot of information or deactivate
 code, but it is very important to remember to close the comment. */

package fibsandlies;
import java.util.HashMap;

/**
 * This is an example of a Javadoc comment; Javadoc can compile documentation
 * from this text. Javadoc comments must immediately precede the class, method, or field being documented.
 */
public class FibCalculator extends Fibonacci implements Calculator {

    private static Map<Integer, Integer> memoized = new HashMap<Integer, Integer>();

    /*
     * The main method written as follows is used by the JVM as a starting point for the program.
     */
    public static void main(String[] args) {
        memoized.put(1, 1);
        memoized.put(2, 1);
        System.out.println(fibonacci(12)); //Get the 12th Fibonacci number and print to console
    }

    /**
     * An example of a method written in Java, wrapped in a class.
     * Given a non-negative number FIBINDEX, returns
     * the Nth Fibonacci number, where N equals FIBINDEX.
     * @param fibIndex The index of the Fibonacci number
     * @return The Fibonacci number
     */
    public static int fibonacci(int fibIndex) {
        if (memoized.containsKey(fibIndex)) {
            return memoized.get(fibIndex);
        } else {
            int answer = fibonacci(fibIndex - 1) + fibonacci(fibIndex - 2);
            memoized.put(fibIndex, answer);
            return answer;
        }
    }
}

classes especiais

Applet

Applets Java foram os programas que foram incorporados em outras aplicações, tipicamente em uma página da Web exibido em um navegador web. O applet Java API agora está obsoleta desde Java 9 em 2017.

servlet

Servlet Java tecnologia fornece aos desenvolvedores web com um mecanismo simples e consistente para estender a funcionalidade de um servidor Web e para acessar sistemas de negócios existentes. Servlets são do lado do servidor componentes Java EE que geram respostas (geralmente HTML páginas) para solicitações (normalmente HTTP pedidos) de clientes .

O servlet API Java tem, em certa medida foi substituída por duas tecnologias Java padrão para serviços web:

JavaServer Pages

JavaServer Pages (JSP) estão do lado do servidor componentes Java EE que geram respostas, tipicamente HTML páginas, para HTTP solicitações dos clientes . JSPs incorporar código Java em uma página HTML usando as especiais delimitadores <% e %>. A JSP é compilado para um Java servlet , uma aplicação Java em seu próprio direito, a primeira vez que é acessado. Depois disso, o servlet gerado cria a resposta.

aplicação swing

Balanço é uma interface gráfica do usuário da biblioteca para a plataforma Java SE. É possível especificar um olhar diferente e sentir através do olhar pluggable e sentir sistema de Swing. Clones do Windows , GTK + , e Motif são fornecidos pela Sun. A Apple também oferece um do Aqua olhar e sentir para MacOS . Onde podem ter sido considerada implementações anteriores desses olhares e sente falta, manda a bola para Java SE 6 endereços esse problema usando mais nativos Widget GUI rotinas de desenho das plataformas subjacentes.

genéricos

Em 2004, os genéricos foram adicionados à linguagem Java, como parte de J2SE 5.0. Antes da introdução dos genéricos, cada declaração de variável teve de ser de um tipo específico. Para as classes de contêiner, por exemplo, este é um problema porque não há nenhuma maneira fácil de criar um recipiente que aceita apenas tipos específicos de objetos. Ou o recipiente opera em todos os subtipos de uma classe ou interface, normalmente Object, ou uma classe de contêiner diferente tem que ser criado para cada classe contida. Genéricos permitem a verificação de tipo de tempo de compilação sem ter que criar muitas classes de contêineres, cada código quase idêntico contendo. Além de permitir que o código mais eficiente, certas excepções de tempo de execução está impedido de ocorrer, através da emissão de tempo de compilação erros. Se Java impediu todos os erros de tipo de tempo de execução ( ClassCastException's) ocorra, seria seguro tipo .

Em 2016, o sistema de tipo de Java foi comprovada doentio .

Crítica

Críticas dirigidas ao Java incluem a implementação de genéricos, a velocidade, a manipulação de números não assinados, a implementação de aritmética de ponto flutuante, e uma história de vulnerabilidades de segurança na implementação Java VM principal HotSpot .

bibliotecas de classe

A biblioteca de classes Java é a biblioteca padrão , desenvolvido para suportar o desenvolvimento de aplicações em Java. É controlada pela Sun Microsystems em cooperação com os outros através do Java Community Process programa. Empresas ou indivíduos que participam neste processo pode influenciar a concepção e desenvolvimento das APIs. Este processo tem sido um tema de controvérsia. A biblioteca de classe contém características como:

Documentação

Javadoc é um sistema de documentação abrangente, criado pela Sun Microsystems , usado por muitos desenvolvedores Java. Ele fornece aos desenvolvedores um sistema organizado para documentar seu código. Comentários Javadoc têm um asterisco extra no início, ou seja, os delimitadores são /**e */, enquanto os comentários normais multi-linha em Java são partiu com os delimitadores /*e */.

implementações

Oracle Corporation é o proprietário atual da implementação oficial da plataforma Java SE, na sequência da sua aquisição da Sun Microsystems em 27 de janeiro de 2010. Esta implementação é baseada na implementação original do Java pela Sun. A implementação do Oracle está disponível para Microsoft Windows (ainda trabalha para XP, enquanto apenas versões posteriores Atualmente oficialmente suportado), MacOS , Linux e Solaris . Como o Java não tem qualquer normalização oficial reconhecido pela Ecma International , ISO / IEC, ANSI, ou outra organização de padrões de terceiros, a implementação do Oracle é o padrão de fato .

A implementação do Oracle é embalado em duas distribuições diferentes: o Java Runtime Environment (JRE), que contém as partes da plataforma Java SE necessários para executar programas em Java e é destinado para usuários finais, e o Java Development Kit (JDK), que se destina para desenvolvedores de software e inclui ferramentas de desenvolvimento tais como o compilador Java , Javadoc , Jar , e um depurador .

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

O objetivo do Java é fazer com que todas as implementações de Java compatível. Historicamente, a licença de marca registrada da Sun para o uso da marca Java insiste que todas as implementações ser "compatível". Isto resultou em uma disputa legal com a Microsoft após Sun afirmou que a implementação da Microsoft não suportar RMI ou JNI e tinha adicionado recursos específicos da plataforma do seu próprio. Sun processou em 1997, e, em 2001, ganhou um acordo de US $ 20 milhões, bem como uma ordem do tribunal impor os termos da licença da Sun. Como resultado, a Microsoft navios já nã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 que os aplicativos do lado do servidor portáteis.

Use fora da plataforma Java

A linguagem de programação Java requer a presença de uma plataforma de software para que programas compilados para ser executado.

A Oracle fornece a plataforma Java para uso com Java. O SDK Android é uma plataforma de software alternativo, usado principalmente para o desenvolvimento de aplicativos Android com seu próprio sistema GUI. O Eclipse plataforma IDE oferece suporte a Java, mas fornece seu próprio sistema GUI SWT.

andróide

O Android sistema operacional faz uso extensivo de tecnologia relacionada à Java.

A linguagem Java é um pilar fundamental no Android , um open source sistema operacional móvel . Embora Android, construído sobre o kernel do Linux , está escrito em grande parte em C, o SDK Android usa a linguagem Java como base para aplicativos Android. A linguagem bytecode suportado pelo Android SDK é incompatível com o bytecode Java e é executado em sua própria máquina virtual, otimizado para dispositivos de baixa memória, como smartphones e computadores tablet . Dependendo da versão do Android, o bytecode ou é interpretado pela máquina virtual Dalvik ou compilado em código nativo pelo Runtime Android .

Android não fornecer a completa biblioteca padrão Java SE, embora o Android SDK não inclui uma implementação independente de um grande subconjunto dele. Ele suporta Java 6 e alguns Java 7 características, oferecendo uma implementação compatível com a biblioteca padrão ( Apache Harmony ).

Controvérsia

O uso da tecnologia relacionada com o Java no Android levou a uma disputa legal entre Oracle e Google. Em 7 de maio de 2012, um júri San Francisco descobriu que se APIs pode ser protegido por direitos autorais, o Google tinha violado os direitos autorais da Oracle pelo uso de Java em dispositivos Android. O juiz distrital William Haskell Alsup determinou em 31 de Maio de 2012, que APIs não pode ser protegido por direitos autorais, mas esta foi revertida pelo Tribunal de Apelações para o Circuito Federal United em maio de 2014. Em 26 de Maio, 2016, o tribunal distrital decidiu em favor da Google, governando a violação de direitos autorais da API Java no Android constitui uso justo.

Veja também

Comparação de Java com outras línguas

Notas

Referências

links externos