처음 만났을 때 java.lang.object 소스 코드의 해시 코드 메소드입니다.
공개 기본 int hashcode ();
왜 원주민이 있습니까? 이것이 내가 배우고 싶은 것입니다. 그래서 나는 아래의 원주민을 요약하고 싶습니다.
1. 기본, 즉 JNI, Java Native 인터페이스를 이해하십시오
모든 언어는 순수하기를 희망합니다. 예를 들어, 특정 솔루션을 해결하려면이 언어로 작성하십시오. Java 플랫폼에는 사용자가 Java Native Interface (Java Local Interface)라고하는 로컬 C 코드와 상호 운용 할 수있는 API가 있습니다.
2. Java에서 C의 "Hello, Jni"에 전화하십시오
우리는 작업을 시작하기에 편리한 단계를 따라야합니다.
1. 부하 라이브러리의 기본 방법과로드 리브러 방법을 포함하는 Java 클래스를 만듭니다 . Hellonative.java 코드는 다음과 같습니다.
공개 클래스 Hellonative {static {System.loadLibrary ( "Hellonative"); } public static native void sayhello (); @SuppressWarnings ( "static-Access") public static void main (String [] args) {new Hellonative (). SayHello (); }}가장 먼저 주목해야 할 것은 기본 방법이며 로딩 라이브러리도 나중에 작동합니다. 기본 키워드는 컴파일러 (실제로 JVM)에게 메소드가 외부로 정의되어 있다고 말하고 여기에서 C를 나타냅니다.이 코드를 직접 실행하면 JVM에서 "Java 예외가 발생했습니다." 콘솔 출력은 다음과 같습니다.
스레드 예외 "main"java.lang.unsatisfiedlinkerror : java.lang.lang.lang.lowllibrary (알 수없는 출처)의 java.library.path. java.lang.runtime.loadlibrary0 (알 수없는 출처)의 java.library.path에는 이교도가 없습니다. HELLONATIVE. <Clinit> (Hellonative.java:5)
이것은 프로그램이 그것을 사용할 때, 가상 머신은 Sayhello를 찾는 방법을 모른다고 말합니다. 아래에 수동으로 쓸 수 있으므로 Mason이 사용하는 것은 당연합니다.
2. javah를 실행하여 메소드가 포함 된 C 선언 헤더 파일을 가져옵니다.
그림과 같이 hellonative.java, 간단히 Javac Javah를 넣으십시오.
다음 hellonative.h 파일을 받았습니다.
/ *이 파일을 편집하지 마십시오 - 기계가 생성됩니다 */#클래스 클래스에 대한 <jni.h>/ * 헤더 포함 */#ifndef _included_hellonative#define _included_hellonative#ifdef __cplusplusextern "c"{#endif/ * * method : hellonic * method : sayhello * signature * signature *. jnicall java_hellonative_sayhello (jnienv *, jclass); #ifdef __cplusplus}#endif#endifJni.h이 파일, /%java_home%는 포함됩니다
3. 헤더 파일에 따라 로컬 메소드를 구현하려면 C를 쓰십시오.
여기서 우리는 단순히이 Sayhello 메소드를 다음과 같이 구현합니다.
#include "Hellonative.h"#include <stdio.h> jniexport void jnicall jiva_hellonative_sayhello {printf ( "hello, jni"); }4. DLL 공유 라이브러리를 생성 한 다음 Java 프로그램을로드하여 호출하십시오.
Windows에서 Mingw GCC는 다음과 같이 실행됩니다
gcc -m64 -wl, -add -stdcall -alias -i "c :/program files/java/jdk1.7.0_71/포함"-i "c :/program/java/jdk1.7.0_71/포함/포함/win32"-shared -o hellonative.dll Hellonative.clll hellonative.c 포함/포함
-M64는 생성 된 DLL 라이브러리가 64 비트임을 의미합니다. 그런 다음이를 실행하십시오.
Java Hellonative
마지막으로 콘솔이 다음과 같이 인쇄된다는 것을 알 수 있습니다.
안녕하세요, JNI
3. JNI 호출 C 흐름도
4. 기타 소개
C ++와 공동 개발 될 때 네이티브가 사용됩니다! 당신은 혼자서 자바를 개발할 필요가 없습니다!
기본 키워드를 사용 하여이 방법이 기본 함수, 즉이 방법이 C/C ++ 언어로 구현되며 DLL으로 컴파일되어 Java에 의해 호출됩니다.
이러한 함수의 구현 기관은 JDK의 소스 코드에 포함되지 않으므로이를 보지 않아야합니다. 그것들은 또한 플랫폼과 다릅니다. 이것은 또한 Java의 기본 메커니즘입니다. 실제로 Java는 다른 플랫폼에서 다른 기본 방법을 호출하여 운영 체제에 대한 액세스를 달성합니다.
1. 기본은 다른 언어 (예 : C ++)와 협력하는 데 사용됩니다. 즉, 기본 기능의 구현은 Java로 작성되지 않습니다.
2. Java가 없기 때문에 소스 코드에 대해 걱정하지 마십시오.
기본은 운영 체제에 알리는 것을 의미합니다.
사용하려면이 기능을 구현해야합니다.
따라서 기본 키워드의 기능은 운영 체제에서 구현되며 Java는 호출 할 수 있습니다.
Java는 크로스 플랫폼 언어입니다. 그것이 교차 플랫폼이기 때문에 지불 한 가격은 기본 층에 대한 약간의 통제를 희생하는 것입니다. 기본 계층을 제어하려면 Java는 다른 언어의 도움이 필요합니다. 이것은 원주민의 역할입니다.
자바는 완벽하지 않습니다. Java는 실행 속도 측면에서 기존 C ++보다 훨씬 느린 사실 외에도 기본 운영 체제 (예 : 시스템 하드웨어 등)에 직접 액세스 할 수 없습니다. 이러한 이유로 Java는 기본 방법을 사용하여 Java 프로그램의 기능을 확장합니다.
기본 방법은 Java 프로그램과 C 프로그램 간의 인터페이스와 비교 될 수 있으며 구현 단계는 다음과 같습니다.
1. Java에서 Native () 메소드를 선언 한 다음 컴파일하십시오.
2. Javah를 사용하여 .h 파일을 생성합니다.
3. 두 번째 단계에서 생성 된 .h 파일을 포함 해야하는 기본 내보내기 메소드를 구현하려면 .CPP 파일을 작성하십시오 (JDK가있는 jni.h 파일도 포함).
4. 세 번째 단계에서 .cpp 파일을 동적 링크 라이브러리 파일로 컴파일하십시오.
5. System.loadLibrary () 메소드를 사용하여 Java에서 4 단계에서 생성 된 동적 링크 라이브러리 파일을로드하십시오. 이 기본 () 메소드는 Java에서 액세스 할 수 있습니다.
Java Local Method가 적용되는 상황
1. 기본 호스트 플랫폼의 기능을 사용하려면 Java API를 통해이 기능에 액세스 할 수 없습니다.
2. 이전 시스템에 액세스하거나 기존 라이브러리를 사용하려면이 시스템 또는 라이브러리가 Java로 작성되지 않습니다.
3. 프로그램의 성능 속도를 높이기 위해 민감한 코드의 기간이 로컬 방법으로 구현됩니다.
위의 기사는 Java에서 기본 키워드의 역할을 종합적으로 이해합니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.