Java关键字static静态详解
文章目录
一、static修饰成员变量
Java中的成员变量按照有无static修饰分为两种:类变量、实例变量。它们的区别如下:
- 类变量:有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享
- 实例变量(对象的变量):无static修饰,属于每个对象的。
由于静态变量是属于类的,只需要通过类名就可以调用:类名.静态变量
实例变量是属于对象的,需要通过对象才能调用:对象.实例变量
二、static修饰成员方法
成员方法根据有无static也分为两类:类方法、实例方法
- 类方法:有static修饰的成员方法,属于类
- 实例方法:无static修饰的成员方法,属于对象
有static修饰的方法,是属于类的,称为类方法;调用时直接用类名调用即可
无static修饰的方法,是属于对象的,称为实例方法;调用时,需要使用对象调用。
static修饰成员方法的内存原理如下:
1.类方法:static修饰的方法,可以被类名调用,是因为它是随着类的加载而加载的;所以类名直接就可以找到static修饰的方法
2.实例方法:非static修饰的方法,需要创建对象后才能调用,是因为实例方法中可能会访问实例变量,而实例变量需要创建对象后才存在。所以实例方法,必须创建对象后才能调用。
三、static的注意事项
四、static应用1(工具类)
如果一个类中的方法全都是静态的,那么这个类中的方法就全都可以被类名直接调用,由于调用起来非常方便,就像一个工具一下,所以把这样的类就叫做工具类。
补充:
工具类里的方法全都是静态的,推荐用类名调用为了防止使用者用对象调用。我们可以把工具类的构造方法私有化。私有化构造方法,这样别人就不能使用构造方法new对象了
五、static应用2(代码块)
代码块根据有无static修饰分为两种:静态代码块、实例代码块
5.1 静态代码块
- 静态代码块重点注意:静态代码块,随着类的加载而执行,而且只执行一次。
5.2 实例代码块
实例代码块的作用和构造器的作用是一样的,用来给对象初始化值;而且每次创建对象之前都会先执行实例代码块。
- 对于实例代码块重点注意:实例代码块每次创建对象之前都会执行一次
六、static应用3(单例设计模式)
6.1 什么是设计模式
一个问题通常有n种解法,其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。设计模式有20多种,对应20多种软件开发中会遇到的问题。关于设计模式的学习,主要学习这两个问题:
- 解决了什么问题?
- 怎么写?
6.2 单例设计模式
确保一个类只有一个对象。具体写法如下:
1、把类的构造器私有。
2、定义一个类变量记住类的一个对象。
3、定义一个类方法,返回对象。
// 单例类
public class A {
// 2、定义一个类变量记住类的一个对象
private static A a = new A();
// 1、私有构造器
private A(){}
// 3、定义一个类方法返回对象
public static A getObject(){
return a;
}
}
6.3 单例应用场景以及好处
应用场景包扩任务管理器对象、获取运行时对象等,在这些业务场景下,使用单例模式,可以避免浪费内存。根据不同的场景需求,单例设计模式的实现方式很多,例如
- 饿汉式单例:拿对象时,对象早就创建好了。
- 懒汉式单例:拿对象时,才开始创建对象。