native
er et java-nøgleord. Det markerer en metode, at den vil blive implementeret i andre sprog, ikke i Java. Metoden er deklareret uden en krop og kan ikke abstract
. Det fungerer sammen med JNI (Java Native Interface).
Syntaks:
method();
Native metoder blev tidligere brugt til at skrive ydelseskritiske afsnit, men i takt med at java er blevet hurtigere, er dette nu mindre almindeligt. Native metoder er i øjeblikket nødvendige, når
- Du har brug for at kalde et bibliotek, skrevet i et andet sprog, fra java.
- Du har brug for at få adgang til system- eller hardwareressourcer, som kun kan nås fra det andet sprog (typisk C). Faktisk kan mange systemfunktioner, der interagerer med den rigtige computer (f.eks. disk- og netværks-IO), kun gøre dette, fordi de kalder indfødt kode.
For at færdiggøre skrivning af indfødte metoder skal du behandle din klasse med javah
værktøj, der genererer en headerkode i C. Du skal derefter levere implementering af headerkoden, producere dynamisk indlæsbart bibliotek (.so
under Linux, .dll
under Windows) og indlæse det (i det enkleste tilfælde med System.load(library_file_name)
. Kodekompletteringen er triviel, hvis der kun overføres primitive typer som integers, men bliver mere kompleks, hvis det er nødvendigt at udveksle strenge eller objekter fra C-koden. Generelt kan alt være på C-niveau, herunder oprettelse af de nye objekter og kald af metoder, der er skrevet i java.
For at kalde koden i et andet sprog (herunder C++) skal man skrive en bro fra C til det pågældende sprog. Dette er normalt trivielt, da de fleste sprog kan kaldes fra C.