javah ve başlık
- Java kursu
- Uzman
- Ders 26/46
- 5 dk
javac -h ile başlık üretmeyi öğrenirsin.
javac -h ile başlık üretimi
Eskiden javah aracı native metotlar için C başlık dosyası üretirdi; Java 8'den beri kullanılmıyor. Yerine javac -h . Sınıf.java kullanılır. Bu komut derleme yapar ve aynı klasöre Sınıf.h dosyası yazar.
Başlık dosyası her native metot için bir C işlev bildirisi içerir: JNIEXPORT jint JNICALL Java_NativeOps_sum(JNIEnv*, jclass, jint, jint);. Bu işlevleri C tarafında sen uygulayacaksın.
Başlık dosyasının içeriği
Üretilen .h dosyası her native metot için bir C işlev bildirisi taşır. Bildiri şöyle görünür: JNIEXPORT dönüşTipi JNICALL Java_Sınıf_metot(JNIEnv* env, jclass cls, ...). JNIEXPORT dışa aktarma, JNICALL çağrı biçimi, JNIEnv* ise C tarafından JVM'e erişmeyi sağlar.
Statik olmayan metotlarda ikinci parametre jobject (this) olur; statik metotlarda jclass olur. C tarafında bu işlevleri uygulayıp paylaşımlı kütüphane olarak derlersin.
Uygulama iki native metot bildir ve başlık işareti yazdır
class NativeOps tanımla; native int sum(int a, int b); ve native String greet(String name); metotları olsun. Main sınıfının main metodunda System.out.println("header generated"); yazdır. Metotları çağırma.
Başlangıç kodu
// NativeOps sınıfını tanımla: native int sum ve native String greet
// Main sınıfını tanımla ve main içinde header generated yazdırÖrnek çözüm
class NativeOps {
native int sum(int a, int b);
native String greet(String name);
}
public class Main {
public static void main(String[] args) {
System.out.println("header generated");
}
}Beklenen çıktı
header generated
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 başlık üreten komutu tamamla
javac ____ NativeOps.java
javac -h . NativeOps.java
Açıklama: javac -h . NativeOps.java komutu başlık üretir.
2 javac -h ne üretir?
- Çalıştırılabilir JAR
- Belgelendirme HTML
- C başlık dosyası (.h) Doğru cevap
- Sınıf dosyası (.class)
Açıklama: javac -h, native metotlar için C başlık dosyası üretir.
3 başlık öğelerini eşleştir
| Kavram | Anlamı |
|---|---|
JNIEXPORT |
Dışa aktarma makrosu |
JNICALL |
Çağrı biçimi |
JNIEnv* |
C arabirim işaretçisi |
jclass |
Sınıf başvurusu |