CodeBlanks Logo Icon CodeBlanks

javah ve başlık

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

Main.java
// 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

Main.java
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

Soru
javac ____ NativeOps.java
Cevap
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

Uzman bölümündeki tüm dersler