在Java编程中我们经常用到一个比较重要的关键字Static,按字面意思来理解就是静态的意思。
Static关键字可以用来修饰变量,方法,还可以用来修饰类。
所谓的静态也就是指用Static关键字修饰的类,方法以及变量都不依赖于具体的对象,可以直接使用。
静态变量和静态方法都存放于JVM内存中的方法区。
只有类是内部类的时候才可以用Static关键字来修饰,例如下面的单例模式的代码中SingletonHolder就是一个静态内部类。
package com.test;
public class Singleton {
/**
* @param args
*/
String name = null;
private static class SingletonHolder {
static final Singleton uniqueInstance = new Singleton();
}
private Singleton() {
// Exists only to defeat instantiation.
}
public static Singleton getInstance() {
return SingletonHolder.uniqueInstance;
}
public String getName(){
return name;
}
public void setName(String name){
this.name= name;
}
public void printInfo(){
System.out.println("the name is " + name);
}
}
对于为什么要使用Static关键字个人认为有以下几个原因
1方便使用,因为静态变量和方法可以直接使用。
2优化性能,因为Static修饰的变量和方法在内存中始终占用同一块内存,因此可以降低分配内存带来的性能损耗。
3对于一些公共变量或者方法可以避免必须先实例化再使用,因为实例化的代价是非常昂贵的。
那么我们应该在什么时候把一个变量或者方法声明成Static(静态)的呢。
如果一个变量或者是方法需要在多个类中频繁的访问,并且该方法中并不保存具体类的运行状态,
那么这个时候我们就可以把该变量或者方法设计成静态的。
Static关键字在Java自身类库中被大量的使用,具体可以参照Java类库的源码。
除了Static我们还经常用到另外一个修饰符Final,从字面意思来理解Final就是终极的,不可改变的意思。
在Java中该关键字可以修饰类,方法,变量,参数。
当一个类被Final关键字修饰时就代表该类是不能被继承的,并且该类中的所有成员变量以及成员方法也都是Final类型的。
当一个方法被Final关键字修饰时就代表该方法是不能被子类重写的。
当一个变量被Final关键字修饰时就代表该变量的值一旦设定就不能再改变。也就是说该变量能且只能被赋值一次。
当一个参数被Final关键字修饰时就代表该参数只能被访问,不能被修改。
我们为什么要使用Final关键字。
对于这个问题我认为在程序中适当的使用Final可以有效的提高程序的性能。
因为使用Final修饰的变量在编译时就已经分配内存和值,在以后的使用过程中可以快速的访问。
那么我们该在什么时候使用Final关键字呢。
1当确定一个类永远不会被继承时我们就可以把类定义成Final类型的。
2当我们不希望子类改变父类中的某一个方法是我们就可以把该方法设计成Final类型的。
3当我们能够确定某个变量的值的时候,我们可以把该变量设计成Final类型的。
4当我们不希望某一个方法改变传入的参数的时候,我们就可以把该参数设计成Final类型的。
以上都是个人学习时候的粗陋见解。希望能对学习Java过程中遇到同样困惑的人有点帮助。