目录
transient
在关于java的集合类的学习中,我们发现ArrayList
类和Vector
类都是使用数组实现的,但是在定义数组elementData
这个属性时稍有不同,那就是ArrayList
使用transient
关键字
private transient Object[] elementData;
protected Object[] elementData;
那么,首先我们来看一下transient关键字的作用是什么。
Java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。这里的对象存储是指,Java的serialization提供的一种持久化对象实例的机制。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。使用情况是:当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。
简单点说,就是被transient修饰的成员变量,在序列化的时候其值会被忽略,在被反序列化后, transient 变量的值被设为初始值, 如 int 型的是 0,对象型的是 null。
instanceof
instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符。
instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
以下实例创建了 displayObjectClass() 方法来演示 Java instanceof 关键字用法:
public static void displayObjectClass(Object o) {
if (o instanceof Vector)
System.out.println("对象是 java.util.Vector 类的实例");
else if (o instanceof ArrayList)
System.out.println("对象是 java.util.ArrayList 类的实例");
else
System.out.println("对象是 " + o.getClass() + " 类的实例");
const
const是Java预留关键字,用于后期扩展用,用法跟final相似,不常用
final
final是Java中的一个关键字,它所表示的是“这部分是无法修改的”。
使用 final 可以定义 :变量、方法、类。
final变量
如果将变量设置为final,则不能更改final变量的值(它将是常量)。
class Test{
final String name = "Hollis";
}
一旦final变量被定义之后,是无法进行修改的。
final 方法
如果任何方法声明为final,则不能覆盖它。
class Parent {
final void name() {
System.out.println("Hollis");
}
}
当我们定义以上类的子类的时候,无法覆盖其name方法,会编译失败。
final类
如果把任何一个类声明为final,则不能继承它。
final class Parent {
}
以上类不能被继承!
static
static表示“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块
静态变量
我们用static表示变量的级别,一个类中的静态变量,不属于类的对象或者实例。因为静态变量与所有的对象实例共享,因此他们不具线程安全性。
通常,静态变量常用final关键来修饰,表示通用资源或可以被所有的对象所使用。如果静态变量未被私有化,可以用“类名.变量名”的方式来使用。
//static variable example
private static int count;
public static String str;
静态方法
与静态变量一样,静态方法是属于类而不是实例。
一个静态方法只能使用静态变量和调用静态方法。通常静态方法通常用于想给其他的类使用而不需要创建实例。例如:Collections class(类集合)。
Java的包装类和实用类包含许多静态方法。main()方法就是Java程序入口点,是静态方法。
//static method example
public static void setCount(int count) {
if(count > 0)
StaticExample.count = count;
}
//static util method
public static int addInts(int i, int...js){
int sum=i;
for(int x : js) sum+=x;
return sum;
}
从Java8以上版本开始也可以有接口类型的静态方法了。
静态代码块
Java的静态块是一组指令在类装载的时候在内存中由Java ClassLoader执行。
静态块常用于初始化类的静态变量。大多时候还用于在类装载时候创建静态资源。
Java不允许在静态块中使用非静态变量。一个类中可以有多个静态块,尽管这似乎没有什么用。静态块只在类装载入内存时,执行一次。
static{
//can be used to initialize resources when class is loaded
System.out.println("StaticExample static block");
//can access only static variables and methods
str="Test";
setCount(2);
}
静态类
Java可以嵌套使用静态类,但是静态类不能用于嵌套的顶层。
静态嵌套类的使用与其他顶层类一样,嵌套只是为了便于项目打包。