一、静态变量
static关键字:静态的,共享的
修饰变量:静态变量
修饰方法:静态方法
修饰代码块:静态代码块
静态变量
格式:
修饰符 static 数据类型 变量名;
作用:
被static修饰的变量,不在直接属于对象,而是直接属于类,会被通过这个类创建的所有对象所共享
调用方法:
类名.静态变量
特点:
1.随着类的加载而加载,随着类的消亡而消失;
2.静态的成员都只加载唯一的一次;
局部变量,实例变量,静态变量的区别:
代码中的位置:
局部变量:方法内部或者方法声明上
实例变量:类中,方法外
静态变量:类中,方法外
内存中的位置:
局部变量:栈内存
实例变量:堆内存
静态变量:堆内存==>方法区==>静态区
默认值:
局部变量:没有默认值
实例变量:有默认值
静态变量:有默认值
代码中的作用域:
局部变量:所属的方法中
实例变量:所属类中(静态方法和静态代码块除外)
静态变量:所属类中
内存中的生命周期:
局部变量:随着方法的调用而加载,随着方法的出栈而消失
实例变量:随着对象的创建而加载,随着对象的消亡而消失
静态变量:随着类的加载而加载,随着类的消亡而消失
二、静态方法
静态方法:
当使用一个类中的方法时,如果该方法为实例方法,创建唯一的对象,不需要考虑对象是特有还是共有,需要将该类中的方法进行改写,由实例方法改写成静态方法,静态方法不在属于对象,直接属于类,所以在实际使用过程中,不需要创建对象,直接通过类名进行获取.
格式:
修饰符 static 返回值类型 方法名 ( ) { }
特点:
静态方法不在属于对象,直接属于类
调用格式:
类名.静态方法(实参);
静态方法的注意事项:
1.在静态方法或者静态代码块中不可以使用实例成员(成员:变量和方法):
实例方法中调用实例方法:正确
实例方法中调用静态方法:正确
静态方法中调用静态方法:正确
静态方法中调用实例方法:错误
2.在静态方法或者静态代码块中不可以使用this关键字(代表对象)和super关键字(代表对象)
3.静态方法虽然可以被这个类创建的所有对象所共享,可以通过对象名调用静态方法,
但是这样的使用方式不推荐,推孝使用类名进行调用
4.静态方法也是随着类的加载而加载,而且只加载唯一的一次
三、静态代码块
静态代码块
位置:类中,方法外
格式:
static {
}
特点和注意事项:
1.随着类的加载而加载,而且只加载唯一的一次
2.静态代码块优先于构造器代码块执行,静态的内容是随着类的加载而加载
3.在静态代码块中不可以使用非静态成员和this,super关键字
作用:
优先初始化一些变量
补充:
单例设计模式
创建唯一的实例的解决思路
设计模式和框架区别
设计模式:解决某一类问题的特定解决模式
框架:半成品项目
实现单例设计模式的步骤
1.针对创建唯一对象的类,私有化构造器
2.在这个类中创建唯一的对象,并用静态进行修饰
3.针对创建的唯一对象加入封装思想,对外只提供获取方式,不提供存储方式
单例设计模式的分类
立即加载(饿汉模式)
1.针对创建唯一对象的类,私有化构造器
2.在这个类中创建唯一的对象,并用静态进行修饰
3.针对创建的唯一对象加入封装思想,对外只提供获取方式,不提供存储方式
延迟加载(懒汉模式)
1.针对创建唯一对象的类,私有化构造器
2.在这个类中定义唯一的对象,并用静态进行修饰
3.针对创建的唯一对象加入封装思想,对外只提供获取方式(当第一次获取的时候,创建唯一的对象),不提供存储方式