Java中的一些关键字
native
native
关键字是Java
为实现底层调用而设计的;- 被
native
修饰的方法,通常是本地的C++
或C
实现的; - 一个
native
方法就是一个Java
调用非Java
代码的接口; - 在定义一个
native
方法时,并不提供实现体(比较像定义一个Java Interface
),因为其实现体是由非Java
语言在外面实现的;
源码举例:
/*
* package java.lang.Object;
*/
// 获取类对象的方法(反射)
public final native Class<?> getClass();
// 为对象生成一个哈希码
public native int hashCode();
volatile
volatile
关键字主要用于保证对共享变量的正确访问,这些共享变量可以是一个类中的成员变量,也可以是静态成员变量;volatile
关键字在线程相关的类中使用较多。
源码示例
// package java.lang;
public class Thread implements Runnable {
...
private volatile String name;
private int priority;
private Thread threadQ;
private long eetop;
...
}
上面示例中的源码是Java
源码中Thread
类的一部分;可以看到,在类属性中,线程的名称通过volatile
关键字修饰,为的就是当对某个线程设置名称后,让所有其他使用该属性的方法或对象第一时间获取到,而不至于发生读取错误。
transient
- 使用
transient
关键字可以修饰类中的属性,使该属性在序列化时不被序列化; - 序列化是指那些实现了
Serilizable
接口的那些类,通过序列化,会将数据存储到数据库中或其他计算机硬件中; - 被序列化的目的是反序列化,即读取该属性原来的真实值;
- 一个类继承了
Serilizable
接口,便会序列化其中的属性,但当不需要序列化某些属性时,便可以用transient
关键字济宁修饰,这样也不会被反序列化。
源码示例
/*
* package java.util.HashMap<K,V>
*/
// 该属性定义了HashMap中键值对的数目
transient int size;
该源码是Java
中HashMap
类中的一部分,size
关键字之所以用transient
关键字修饰,就是觉得没有必要将这个属性序列化。因为该属性变化的频率较高。