native关键字和transient关键字

来源:互联网 发布:怎样在淘宝上买罂粟壳 编辑:程序博客网 时间:2024/05/01 06:10

一、native关键字

查看java的源码,可以看到很多 使用native关键字声明的函数,比如hashcode()函数


1、native关键字用法

native是与C++联合开发的时候用的!使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。 这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。总而言之:

  • native 是用做java 和其他语言(如c++)进行协作时使用的,也就是native 后的函数的实现不是用java写的。
  • 既然都不是java,那就别管它的源代码了,我们只需要知道这个方法已经被实现即可。
  • native的意思就是通知操作系统, 这个函数你必须给我实现,因为我要使用。 所以native关键字的函数都是操作系统实现的, java只能调用。
  • java是跨平台的语言,既然是跨了平台,所付出的代价就是牺牲一些对底层的控制,而java要实现对底层的控制,就需要一些其他语言的帮助,这个就是native的作用了
2、JNI-----Java native interface
native方法是通过java中的JNI实现的。
3、JNI的书写步骤
  • 编写带有native声明的方法的java类,生成.java文件
  • 使用javac命令编译所编写的java类,生成.class文件
  • 使用javah -jni java类名生成扩展名为h的头文件,也即生成.h文件
  • 使用C/C++(或者其他编程想语言)实现本地方法,创建.h文件的实现,也就是创建.cpp文件实现.h文件中的方法
  • 将C/C++编写的文件生成动态连接库,生成dll文件

二、transient关键字

1、首先理解序列化 ----序列化是将对象状态转换为可保持或传输的格式的过程

  • Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。
  • 使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。
  • 除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。
  • 只要一个类实现了java.io.Serializable接口,那么它就可以被序列化。

2、反序列化 ----反序列化是将流转换为对象的过程

3、transient关键字  ---被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化

  • transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。
  • 被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
  • 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。


0 0
原创粉丝点击