Introdução da palavra-chave nativa:
A palavra-chave nativa funciona como um link entre a linguagem JAVA e um pedaço de código ou biblioteca escrita em diferentes idiomas, exceto JAVA, que talvez dependa da máquina em que você está operando. Se a palavra-chave nativa for aplicada a um método, então isso significa que o método será implementado usando código nativo escrito em algum outro idioma (como C ou C++) via JNI (interface nativa JAVA).
Sintax:
A sintaxe do código nativo é a mesma definição de função normal com a palavra-chave “nativo” adicionada no início da função.
Para ex:
Teste de classe pública
{public native String testMethod (String parameter);}
Here public is an access modifier. Ele deve ser público para que outro arquivo possa utilizá-lo. String é o tipo de dado de retorno da função. Pode ser inteiro, caracter ou booleano, dependendo da palavra-chave. O parâmetro passado para esta função também é do tipo string de dados. Tudo deve ser mantido na classe.
Após a declaração da função chamamos esta função via objeto criado e biblioteca carregada.
public static void main(String args)
{
System.loadLibrary(“testing”);
testing testingnew = new testing();
String output = testingnew.stringMethod(“NATIVE”);
}
Library definida acima deve ser carregada primeiro e o n seu objeto é criado. Com a ajuda deste objeto , função nativa é chamada.
Como funciona a palavra-chave nativa?
Deve haver dois arquivos. Um contendo código JAVA enquanto o outro deve ter código C/C++ legado. O código Java será usado para chamar o código legado. Este código legado irá interagir com o hardware e retornar a saída esperada.
Quando o código legado interage com o hardware então ele não seguirá as diretrizes traçadas pelo JAVA. Este código irá fazer o processamento desejado para obter a saída e passar os resultados para a JNI. A interface nativa Java irá então verificar em seu diretório contendo todas as regras pertencentes ao código nativo (Isto vem em um arquivo chamado javah.exe no SDK). JNI é projetado como parte do kit de ferramentas Java. Após este processamento o JAVA irá publicar as saídas na própria linguagem JAVA. Quando estamos criando um programa em JAVA então devemos ter certeza que existe um link variável/fluxo de dados entre o arquivo JAVA e o arquivo legado para que haja um fluxo suave de dados entre ambos.
Passos explicando como fazer uso de palavras-chave nativas são dados abaixo:
- Escrever o código JAVA contendo o método nativo, biblioteca compartilhada carregada e salvá-la usando “filename”.JAVA”.
- Compilar código JAVA e converter o código para bytecode.
- Criar arquivo de cabeçalho C/C++ contendo assinatura de função nativa que deve ser chamada.
- Escrever código C/C++ tendo implementação do método nativo.
- Executar arquivo executável JAVA para ver os resultados.
Exemplos para mostrar implementação de palavra-chave nativa:
Devíamos escrever código no Eclipse e executar o código para criar uma biblioteca usando qual código C será então implementado.
Code: package com.slackerOne;
public class JPP {
public static static native void pAccess();
public static native int pRead();
public static native void pWrite(int port, int output);
static{
System.loadLibrary(“JPPlibs”);
}
sem vazio público jAccess(){
JPP.pAccess();
>public int jRead(){
retornar JPP.pRead();
}
public void jWrite(int port, int output){
JPP.pWrite(port, output);
}
}
Após salvar este código na nova “classe” do projeto java. Temos que configurar o ambiente de execução para gerar o arquivo header.
Quando vamos executar isto devemos gerar uma biblioteca.
Output:
Aqui criamos o arquivo header a partir do código java que atuará como link entre o código nativo e a linguagem java.
Vantagens:
- Põe uma vantagem adicional ao JAVA para interagir com o código escrito em outras línguas e reduzir o trabalho para ter o mesmo código escrito em JAVA, reduzindo assim a redundância do código.
- Põe melhora a performance geral do código. Como o código escrito em outro idioma pode ser mais rápido quando trabalha com o idioma da máquina em comparação com o JAVA. Podemos então usar o programa JAVA para chamar este código.
- Usando esta abordagem, podemos dar directamente chamadas de sistema. Reduzindo a probabilidade de interferência externa e melhorando a velocidade de execução do código.
- Pode chamar dinamicamente uma biblioteca pré-carregada (escrita em qualquer idioma que não seja JAVA) usando um código de condução arbitrário escrito em JAVA e ainda obter resposta em JAVA.
- Faz com que seja acessível para JAVA para alcançar os recursos de hardware que estão disponíveis para serem usados apenas por outros idiomas.
- No caso de ter um código dependente da plataforma já compilado para a sua aplicação e cujos recursos não são suportados via JAVA, nesse caso podemos ter código nativo e ligar esse código nativo ao JAVA através de palavra-chave nativa.
Rules:
- Native keyword is to be used before method name.
- Native method declaration does not have body and should end with semi colon as these methods are not defined in JAVA but are present in C/C++ language.
- Os métodos nativos não podem ser declarados como método abstrato.
- Desde que não haja certeza se o código antigo anterior foi escrito de acordo com a norma IEEE 754 (A Norma IEEE para Aritmética de Ponto Flutuante é uma norma técnica para aritmética de ponto flutuante estabelecida em 1985 pelo Institute of Electrical and Electronics Engineers), portanto, não podemos declarar estes métodos nativos como strictftp.
- A especificação da Interface Nativa Java (JNI) é projetada pelo JAVA para definir as regras e declarações para implementar métodos nativos, como conversão de tipos de dados entre Java e o código nativo.
Conclusion:
Palavra-chave nativa é a que faz a ponte entre as linguagens nativas e o JAVA. Isto pode ser usado como um link crítico se a interação do nosso software com o hardware for mais para obter o código eficiente usando código pré-existente. Isso faz com que a implementação funcione menos em comparação com o desenho de um novo código de aplicação a partir do zero, onde quer que ele possa ser evitado.