native
è una parola chiave java. Contrassegna un metodo, che sarà implementato in altri linguaggi, non in Java. Il metodo è dichiarato senza un corpo e non può essere abstract
. Funziona insieme a JNI (Java Native Interface).
Sintassi:
method();
I metodi nativi erano usati in passato per scrivere sezioni critiche per le prestazioni, ma con java sempre più veloce questo è ora meno comune. I metodi nativi sono attualmente necessari quando
- È necessario chiamare da java una libreria, scritta in un altro linguaggio.
- È necessario accedere a risorse di sistema o hardware che sono raggiungibili solo dall’altro linguaggio (tipicamente C). In realtà, molte funzioni di sistema che interagiscono con il computer reale (IO del disco e della rete, per esempio) possono farlo solo perché chiamano il codice nativo.
Per completare la scrittura del metodo nativo, è necessario elaborare la classe con lo strumento javah
che genererà un codice header in C. È quindi necessario fornire l’implementazione del codice header, produrre la libreria caricabile dinamicamente (.so
sotto Linux, .dll
sotto Windows) e caricarla (nel caso più semplice con System.load(library_file_name)
. Il completamento del codice è banale se vengono passati solo tipi primitivi come gli interi, ma diventa più complesso se è necessario scambiare stringhe o oggetti dal codice C. In generale, tutto può essere a livello di C, inclusa la creazione di nuovi oggetti e il richiamo di metodi, scritti in java.
Per chiamare il codice in qualche altro linguaggio (incluso C++), è necessario scrivere un ponte da C a quel linguaggio. Questo di solito è banale perché la maggior parte dei linguaggi sono richiamabili dal C.
.