Java Native Method
一、什么是java native method?
"A native method is a Java method whose implementation is provided by non-java code."
简单来讲Native Method就是java调用非java代码的接口,该方法的实现由非java代码实现,比如C、C++。
定义一个Native Method,并不提供具体的实现体(有点像Java Interface),因为其实现体是非Java代码在外面实现的。
public class ItestNativeMethod {
    native public void Native(int x);
    native static public long Native();
    native synchronized private float Native(Object o);
}
这些方法的声明描述里非java代码在java代码里面是什么样子的。
一个Native Method方法可以返回任何java类型,包括非基本类型,而且可以进行异常控制。这些方法的实现体可以制一个异常,并且抛出这个异常。
二、为什么要用Native Method?
java虽然用起来比较方便,然而有些方面的任务用Java实现起来不容易。
1、与java环境外交互:
有时java应用需要与java外面的环境交互。如java需要与底层系统交互。
2、与操作系统交互
通过使用本地方法,我们得以用java实现了jre的与底层系统的交互,甚至JVM的一些部分就是用C写的,还有,如果我们要使用一些java语言本身没有提供封装的操作系统的特性时,我们也需要使用本地方法。
三、JVM怎样使Native Method跑起来
我们知道当一个类第一次被使用时,这个类的字节码会被加载到内存,并且只会加载一次。在这个被加载的字节码的入口维持着一个该类所有方法描述符的list,这些方法的描述符包含这样的一些信息: 方法代码存于何处,它有哪些参数、方法的
的描述符(public/private/proected)等等。
如果一个方法藐视符内有native,这个描述符块将有一个指向该方法的实现的指针。这些实现在一些DLL文件内,但是它们会被操作系统加载到java程序的地址空间。当一个带有本地方法的类被加载时,其相关的DLL并未被加载,因此指向方法实现的
指针并不会被设置。当本地方法被调用之前,这些DLL才会被加载,这是通过调用java.system.loadLibrary()实现的。
Java Native Method的更多相关文章
- JAVA Native Interface (JNI)
		
1. Introduction At times, it is necessary to use native (non-Java) codes (e.g., C/C++) to overcome ...
 - java.lang.IndexOutOfBoundsException at java.io.FileOutputStream.writeBytes(Native Method)
		
ss available : /usr/linkapp/data/linkapp/ddn_1440639847758_temp java.lang.IndexOutOfBoundsException ...
 - NDK(3)java.lang.UnsatisfiedLinkError: Native method not found解决方法
		
调用native方法时报错如下 : “java.lang.UnsatisfiedLinkError: Native method not found.... ”: 原因分析: 链接器只看到了在so中 ...
 - java.lang.UnsatisfiedLinkError: Native method not found 三种可能解决方案
		
so文件编译生成后,运行时,有时候会遇到java.lang.UnsatisfiedLinkError: Native method not found问题,有可能是以下三种因素: 一.Jni方法头部大 ...
 - 修改Android 4.2.2的原生Camera引出的java.lang.UnsatisfiedLinkError: Native method not found,及解决方法
		
修改Android 4.2.2的原生Camera应用,做一些定制,将Camera的包名从之前的 package com.android.* 修改成了com.zhao3546.*. 调整后,应用可以正常 ...
 - Mac OS X中报:java.io.UnixFileSystem.createFileExclusively(Native Method)的简单原因
		
这个博客太简单了!想到可能有其它朋友也遇到这个问题,就记录一下. 今天把一个之前在Windows上的Java项目放到Mac OS X上执行,本来认为应该非常easy的事情,结果还是报: Excepti ...
 - 待解决ava.lang.OutOfMemoryError: PermGen space 	at java.lang.ClassLoader.defineClass1(Native Method)
		
java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at ja ...
 - java.lang.Object.wait(Native Method)
		
java.lang.Object.wait(Native Method) java.lang.Object.wait(Object.java:502) java.util.TimerThread.ma ...
 - Caused by:java.lang.IllegalStateException at android.media.MediaPlayer._setDataSource(Native Method)
		
使用Mediaplayer播放本地音频,在第二次调用mediaplayer.setDataSource()时报错如下: Caused by: java.lang.IllegalStateExcepti ...
 
随机推荐
- MMORPG大型游戏设计与开发(客户端架构 part3 of vegine)
			
无论在何处在什么地方,我们都或多或少的接触到数学知识.特别是在客户端中,从打开界面的那一刻起就有太多与数学扯上的关联,如打开窗口的大小,窗口的位置,窗口里面的元件对象,以及UI的坐标等等.而在进入游戏 ...
 - u3d_shader_surface_shader_6
			
主题:1.膨胀效果:2.surface shader实际生成的代码: o(︶︿︶)o 粘贴复制代码易,理解透彻代码难... 一:膨胀效果 1.在#pragma 编译指令里添加vertex:vert以 ...
 - qau-国庆七天乐——A
			
A - Who's in the Middle //先吐槽一波vj,不知道怎么回事,bits/stdc++.h不能用了...坑爹 7225007 upstar A Compile Error ...
 - Linux—C内存管理
			
程序(可执行文件)存储结构与进程存储结构: 查看文件基本情况:file fileName.查看文件存储情况:size fileName(代码区text segment.全局初始化/静态数据区data ...
 - HTML 学习笔记 CSS3 (多列)
			
CSS3多列 通过CSS3 我们能够创建多个列来对文本进行布局. 在这篇文章中 你将了解到如下多列属性: column-count column-gap column-rule 浏览器支持: 多列的属 ...
 - Java中HashSet,HashMap和HashTable的区别
			
HashMap.HashSet.HashTable之间的区别是Java程序员的一个常见面试题目,在此仅以此博客记录,并深入源代码进行分析: 在分析之前,先将其区别列于下面 1:HashSet底层采用的 ...
 - 【BZOJ 1001】[BeiJing2006]狼抓兔子
			
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...
 - 【WPF】TextBox样式重写注意事项
			
1.普通控件重写需要添加一行 <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="C ...
 - 嵌入支付宝SDK,出现“LaunchServices: ERROR: There is no registered handler for URL scheme alipay”错误
			
应用项目中嵌入支付宝SDK,在模拟器运行app后,会出现“LaunchServices: ERROR: There is no registered handler for URL scheme al ...
 - Android 常用的adb命令
			
1.安装APK(如果加 -r 参数,保留已设定数据,重新安装filename.apk) adb install xxx.apk adb install -r xxx.apk 2.卸载APK(如果加 - ...