写JAVA程序时,经常会对类的内部成员进行static修饰,那到底static有什么作用呢?为什么要有它?
static是指静态的意思。它的作用主要为两个方面和4种使用情况:
两大作用:
1)为某特定的数据类型或者对象分配单一的存储空间。(静态也就是独立)
2)实现某个方法、属性或类,而不是对象关联在一起,也就是说,在不创建对象的情况下就可以通过类来直接调用方法或者使用类的属性。
四大使用情况:
1)成员变量。
java没有全局的概念 ,而static可以达到全局的效果。静态变量(static修饰)属于类,在内存中只有一个复制(所有实例都指向一个内存地址),只要静态变量所在类被加载,就被分配空间,可以直接使用。(类.静态变量和对象.静态变量)
如:public static int sum=0;
2)成员方法。
静态方法(static修饰)是类的方法,不需要创建对象就可以别调用,而非静态变量(无static修饰)是对象的方法,需要对象创建后才可以被使用。static方法中不能使用this和super关键字,不能调用非static方法,只能访问所属类的静态成员变量和成员方法。因为当static 方法被调用时,这个类的对象可能还没被创建即使已经创建了,也无法确定地调用对象的哪个方法。static 方法不能访问非static类型的变量。(静静结合)PS:不能再成员函数内定义静态变量
如:public static String method(){ return new String(data);}
static的一个重要用途:实现单例模式。即该类只能有一个实例,必须隐藏类的构造方法(private修饰),并提供一个创建对象的方法。把创建对象的方法声明为static。
如:
class SingleMode{
private static SingleMode instance=null;
private SingleMode(){ }//构造方法
public static SingleMode getInstance(){ //创建对象的方法
if(instance ==null){
instance=new SingleMode();
}
return instance;
}
}
3)代码块。
静态代码块(static修饰)在类中是独立于成员变量和成员函数的代码块。JVM加载类时会直接执行static代码块,常用于初始化静态变量,只执行一次。
如:static{ Test.sum=1;}
4)内部类。
静态内部类(static修饰)不依赖于外部类的实例对象而被实例化,通常内部类需要外部类实例化后才能实例化。它不能与外部类同名(不同名),不能访问外部类的普通成员(非static修饰的变量和方法)PS:只有内部类才能用static修饰
如:
static class Inner{
void print(){
System.out.print("我是内部类");
}
}
public static void main(String[] args){
Test.Inner mytest=new Test.Inner();
myTest.print();
}