static关键字的使用
1、static内存解析
2、使用
-
属性:随着类的加载,只加载一次,可以用对象和类进行调用,或者可以省略,但是要切记省略的是类名,不是this也不是对象名。
-
方法:同上,静态方法中只能调用静态的属性和方法(从生命周期来看),非静态方法都可以调用;静态方法内不能使用this和super关键字。
-
代码块
-
内部类
3、实例:单例设计模式
采用一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
使用场景
- 饿汉式:对象加载时间过长,线程安全
public class test {
public static void main(String[] args){
Animal c=Animal.getAnimal();
Animal d=Animal.getAnimal();
System.out.println(c==d);
}
}
class Animal{
private Animal(){
}
private static Animal a=new Animal();
public static Animal getAnimal(){
return a;
}
}
- 懒汉式:延迟对象创建,这个版本线程不安全
public class test {
public static void main(String[] args){
Animal c=Animal.getAnimal();
Animal d=Animal.getAnimal();
System.out.println(c==d);
}
}
class Animal{
//私有化类的构造器
private Animal(){
}
//声明当前类对象,没有初始化
private static Animal a=null;
//声明public、static的返回方法
public static Animal getAnimal(){
if(a==null) a=new Animal();
return a;
}
}
//这个是线程安全的
public class test {
public static void main(String[] args) {
}
}
class Bank{
private Bank(){}
private static Bank bank=null;
public static Bank getBank(){
if(bank==null){
synchronized(Bank.class){
if(bank==null) bank=new Bank();
}
}
return bank;
}
}