面向对象的陷阱——native方法的陷阱
来源:互联网 发布:山东塑胶跑道标准数据 编辑:程序博客网 时间:2024/05/21 07:53
4、native方法的陷阱
在Java方法定义中有一类特殊的方法:native方法。对于native方法而言,Java程序不会为该方法提供实现体。
public class NativeTest {public native void info();}使用native修饰的方法就像一个“抽象方法”,只有方法签名,没有方法体。从这个意义上来说,native关键字和abstract关键字有点类似。不过,native方法通常需要借助C语言来完成,即需要使用C语言为Java方法提供实现。其实现步骤如下。
- 用javah编译第一步生成的class文件,将产生一个.h文件。
- 写一个.cpp文件实现native方法, 其中需要包含第1步产生的.h文件(.h文件中又包含了JDK带的jni.h文件)。
- 将第2步的.cpp文件编译成动态链接库文件。
- 在Java中用system的loadLibrary()方法或Runtime的loadLibrary()方法加载第3步产生的动态链接库文件,就可以在Java程序中调用这个native方法。
public class SleepTest {public static void main(String[] args) throws Exception{long start = System.currentTimeMillis();Thread.sleep(2);System.out.println(System.currentTimeMillis() - start);}}尝试编译、运行上面程序,如果使用Windows XP系统的,大部分都会输出0,极少数机会输出16,;如果使用win7系统的,大部分会输出16.这个运行结果非常的奇怪,当查看JDK关于Thread.sleep()方法的介绍,发现有如下的解释:让当前执行的线程sleep(暂停)指定的毫秒数,具体暂停多少毫秒取决于系统计时器的精度。也就是说,Thread的sleep()方法其实是一个native方法。
上面程序给出的教训是,千万不要过度相信JDK提供的方法。虽然Java语言本身是跨平台的,但Java的native方法还是要依赖于具体的平台,尤其是JDK所提供的方法,更是包含了大量的native方法。使用这些方法时,要注意它们在不同平台上可能出现的差异。
1 0
- 面向对象的陷阱——native方法的陷阱
- static native面向对象的陷阱
- 面向对象的陷阱——构造器的陷阱
- 27、面向对象的陷阱
- 面向对象的陷阱——instanceof运算符的陷阱
- 面向对象的陷阱——非静态内部类的陷阱
- 第7篇 面向对象的陷阱
- java 之 面向对象的陷阱
- 疯狂Java笔记之面向对象的陷阱
- Java表达式的陷阱——关于字符串的陷阱
- Java表达式的陷阱——表达式类型的陷阱
- Java表达式的陷阱——正则表达式的陷阱
- Java表达式的陷阱——多线程的陷阱
- java中String对象的split方法的小陷阱
- '\'的陷阱
- :?的陷阱
- getparent方法的一些陷阱
- Thread.interrupted()方法的陷阱
- CF#803 A. Maximal Binary Matrix(贪心)
- MySQL日记——Explain详细介绍
- Linux下pthread_cond_wait()多线程同步实例
- 51nod 1010 只包含因子2 3 5的数【打表+二分】
- Microsoft 宣布今年底关闭开源软件托管平台 CodePlex
- 面向对象的陷阱——native方法的陷阱
- bzoj 1192: [HNOI2006]鬼谷子的钱袋 (数论)
- Linux curses库使用
- Oracle 查询日期显示年月日时分秒格式
- 图解分布式增删改查
- 1079[bzoj]: [SCOI2008]着色方案
- 高考模拟录取系统
- Angular 浅谈路由
- UVA