(1)static的作用:

1)修饰成员变量,称为静态成员变量。无论定义多少个对象,他们都共享一个静态成员变量。无static修饰的成员变量,称为实例成员变量,必须通过对象来访问。

2)修饰成员方法,称为静态成员方法。同静态成员变量一样,静态成员方法只能访问静态成员变量,原因是创建多个对象时,静态成员函数不知道访问哪个对象中的成员,或者没有创建对象时,也同样访问不了其它成员变量。

(2)访问静态成员变量:

1)类名.静态成员变量(推荐)。

2)通过对象访问(不推荐),通过对象名找到堆空间中的对象,再通过对象来找到静态成员变量,访问速度不如直接通过类名来访问。

(3)静态成员变量和静态成员方法的内存机制: 静态成员无需创建对象就会被加载到堆区。静态成员方法会被加载到方法区,由堆区中的对象来引用。

(4)注意事项: alt

(5)static的应用:

1)工具类————内部全部都是静态方法,每个方法完成一个功能,由于工具类无需创建对象,所以把构造器私有化会显得更专业一些。

2)静态代码块————由static修饰的代码块,属于类,与类一起优先加载一次,自动触发执行。作用:初始化静态资源。与静态代码块相对应的是构造代码块(无static修饰),每次调用构造器时,都会优先执行构造代码块中的内容,然后才会执行构造器中的代码,使用场景为初始化实例资源。

3)单例模式:

饿汉单例模式————在获取对象前,对象就已经准备好了。实现方式:通过静态的方式来定义一个对象,这样该对象就在堆区提前创建了,为此,应该要私有化默认构造方法。创建对象时,使用赋值的方法来为对象赋初值。如果不使用赋值的方法来创建对象,那么对象只是被声明,而并不会被创建,也不会调用默认构造方法(必须使用new关键字来配合调用默认构造函数),只是声明对象,那么该对象是不可用的,因为在java中未被初始化的变量都不能够直接使用。java创建对象与c++不同,c++声明一个对象时,就会自动调用默认构造函数。

懒汉单例模式————在真正需要对象的时候,才去创建一个具体的对象(延迟加载对象)。实现步骤,定义一个类,把构造器私有化。在类中声明一个用于存储对象的静态变量,提供一个返回单例对象的方法(即对象地址为null时才创建一个对象)