在Java中,extern
關(guān)鍵字通常用于聲明一個外部變量或方法。然而,需要注意的是,Java本身并沒有直接支持extern
關(guān)鍵字,因為它是C和C++語言中的概念。在Java中,我們通常通過其他方式來實現(xiàn)類似的功能。
盡管如此,如果你是在閱讀或使用C或C++編寫的代碼,并希望與Java代碼進行交互,那么你可能會在Java代碼中使用JNI(Java Native Interface)來調(diào)用C或C++中的函數(shù)或訪問其變量。在這種情況下,你可以將C或C++中的函數(shù)聲明為extern
,以指示它們是由其他語言(如Java)調(diào)用的。
在C或C++中,extern
的聲明方式通常如下:
extern int global_variable;
這表示有一個名為global_variable
的全局變量,它在其他地方(可能是另一個源文件)被定義。
2. 聲明全局函數(shù):
extern void some_function();
這表示有一個名為some_function
的全局函數(shù),它在其他地方被定義。
3. 在C++中使用extern "C"
:
當(dāng)你在C++代碼中調(diào)用C語言編寫的函數(shù)時,為了防止C++的名稱修飾(name mangling),你可以使用extern "C"
來聲明這些函數(shù)。這樣,C++編譯器就會知道這些函數(shù)是用C語言風(fēng)格鏈接的。
extern "C" {
void some_c_function();
}
然后,在C++代碼中,你可以像調(diào)用普通C++函數(shù)一樣調(diào)用some_c_function()
。
回到Java,如果你想要調(diào)用C或C++中的函數(shù)或訪問其變量,你需要使用JNI。這通常涉及創(chuàng)建一個Java類,該類聲明了本地方法(使用native
關(guān)鍵字),然后使用Java的System.loadLibrary()
或System.load()
方法加載包含這些本地方法實現(xiàn)的庫。
示例:
public class NativeLibrary {
static {
System.loadLibrary("native_library");
}
public native void someNativeMethod();
}
在這個例子中,someNativeMethod()
是一個本地方法,它在名為native_library
的庫中被實現(xiàn)。