当前位置: 技术问答>java相关
谁给解释一下native这个关键字
来源: 互联网 发布时间:2015-11-07
本文导语: 同上,立即结贴 | java语言是运行在虚拟机上的, java又是不允许直接访问硬件的, (也就是java安全性的体现) 而java想要做一些例如绘图、画线之类的要去操作硬件的事情的话, 必然要用到...
同上,立即结贴
|
java语言是运行在虚拟机上的,
java又是不允许直接访问硬件的,
(也就是java安全性的体现)
而java想要做一些例如绘图、画线之类的要去操作硬件的事情的话,
必然要用到底层一些的调用。
这就引出了native的关键字!
native是一个用来修饰方法的关键字!
用它修饰的方法,在虚拟机里都有一个与这个java方法同名的函数,
去做java想要做的事情!
也就是说:
调用到native修饰的方法,
其实就是调用虚拟机里的一个同名方法去做要做的事!
这也就是为什么native方法都没有方法体的原因!
例如Graphics类里有一个drawRect的方法。
它的定义就是:
public native void drawRect(int x, int y, int width, int height);
调用到它的时候,就是告诉虚拟机,
我要画一个根据x,y,width,height这些参数定义的矩形!
而实际起到作用去画这个矩形的,
是虚拟机里的一个名为XXXX_XXXX_drawRect的C函数
XXX使这个函数的打包路径,和import中的XXX.XXX差不多!
简单说:
其实java根本什么也没做,
做的只是一些面向对象的定义(但这些定义也够复杂)
而“干实事”的都一些虚拟机里的那些用C写成的函数!
这是我的理解,你能明白吗?:)
祝你成功!!
java又是不允许直接访问硬件的,
(也就是java安全性的体现)
而java想要做一些例如绘图、画线之类的要去操作硬件的事情的话,
必然要用到底层一些的调用。
这就引出了native的关键字!
native是一个用来修饰方法的关键字!
用它修饰的方法,在虚拟机里都有一个与这个java方法同名的函数,
去做java想要做的事情!
也就是说:
调用到native修饰的方法,
其实就是调用虚拟机里的一个同名方法去做要做的事!
这也就是为什么native方法都没有方法体的原因!
例如Graphics类里有一个drawRect的方法。
它的定义就是:
public native void drawRect(int x, int y, int width, int height);
调用到它的时候,就是告诉虚拟机,
我要画一个根据x,y,width,height这些参数定义的矩形!
而实际起到作用去画这个矩形的,
是虚拟机里的一个名为XXXX_XXXX_drawRect的C函数
XXX使这个函数的打包路径,和import中的XXX.XXX差不多!
简单说:
其实java根本什么也没做,
做的只是一些面向对象的定义(但这些定义也够复杂)
而“干实事”的都一些虚拟机里的那些用C写成的函数!
这是我的理解,你能明白吗?:)
祝你成功!!
|
native用在类的method前面,表示这个method不是用java实现的。
/**
例如
*/
native xxxMethod();
/**
例如
*/
native xxxMethod();
|
method implemented in another language c/c++.....