Это действительно спорный вопрос. Ядровые интерфейсы Java - это языковая функция, позволяющая вам определить вызов функции в Java, который будет передан в код, который не является java, в частности, является родным для платформы. Если вы посмотрите на FileOutputStream.java в src.zip вашего SDK, вы увидите подобный коду:
/**
* Opens a file, with the specified name, for writing.
* @param name name of file to be opened
*/
private native void open(String name) throws FileNotFoundException;
/**
* Opens a file, with the specified name, for appending.
* @param name name of file to be opened
*/
private native void openAppend(String name) throws FileNotFoundException;
/**
* Writes the specified byte to this file output stream. Implements
* the <code>write</code> method of <code>OutputStream</code>.
*
* @param b the byte to be written.
* @exception IOException if an I/O error occurs.
*/
public native void write(int b) throws IOException;
Так что я хотел бы сказать, если вопрос - это библиотека классов использовать то же обозначение Я делаю для доступа к внешним вызовам библиотеки на системном уровне. Думаю, ответ будет да.
Однако виртуальная машина Java, которая интерпретирует java-байт-код и применяет эти правила, определенно является внутренним кодом - я подозреваю, что ради именования (разные «родные» системы используют совершенно разные API-интерфейсы), в отличие от обычных вызовов, эти вызовы захватываются виртуальной машиной и обрабатываются виртуальной машиной.
Оказалось, что это такое JNI: JNIEXPORT аннулируются JNICALL Java_java_io_FileOutputStream_openAppend (JNIEnv * окр, jobject это, jstring путь) { FileOpen (окр, это, путь, fos_fd, O_WRONLY | O_CREAT | O_APPEND); } – Roskoto