native
é uma palavra-chave java. Ela marca um método, que será implementado em outras linguagens, não em Java. O método é declarado sem um corpo e não pode ser abstract
. Ele funciona junto com JNI (Java Native Interface).
Syntax:
method();
Métodos nativos eram usados no passado para escrever seções críticas de performance, mas com o java ficando mais rápido isso agora é menos comum. Métodos nativos são atualmente necessários quando
- Você precisa chamar do java uma biblioteca, escrita em outro idioma.
- Você precisa acessar recursos de sistema ou hardware que só são acessíveis a partir de outro idioma (tipicamente C). Na verdade, muitas funções do sistema que interagem com computador real (disco e IO de rede, por exemplo) só podem fazer isso porque chamam código nativo.
Para completar a escrita do método nativo, você precisa processar sua classe com javah
ferramenta que irá gerar um código de cabeçalho em C. Você então precisa prover implementação do código de cabeçalho, produzir biblioteca dinamicamente carregável (.so
em Linux, .dll
em Windows) e carregá-la (no caso mais simples com System.load(library_file_name)
. O completamento de código é trivial se apenas tipos primitivos como inteiros forem passados, mas fica mais complexo se for necessário trocar strings ou objetos do código C. Em geral, tudo pode estar no nível C, incluindo a criação dos novos objetos e métodos de chamada de retorno, escritos em java.
Para chamar o código em alguma outra linguagem (incluindo C++), você precisa escrever uma ponte de C para essa linguagem. Isso geralmente é trivial, já que a maioria dos idiomas podem ser chamados de C.