面向对象进阶(static、单例、代码块、继承)
静态关键字:static
static的作用、修饰成员变量的用法
-
作用:
- static是静态的意思,可以修饰成员变量,表示该成员变量只在内存中只存储一份,可以被共享访问、修改。
-
成员变量可以分为2类
- 静态成员变量(有static修饰,属于类,内存中加载一次)
public class User { // 静态成员变量 public static String onlineNumber= 161; }访问:类名.静态成员变量
- 实例成员变量(无static修饰,存在于每个对象中)
public class User { public static String onlineNumber= 161; // 实例成员变量 private String name; private int age; }访问:对象.实例成员变量
static的注意事项总结[面试热点]
- 静态方法只能访问静态的成员,不可以直接访问实例成员。
- 实例方法可以访问静态的成员,也可以访问实例成员。
- 静态方法中是不可以出现this关键字的。
static应用知识:代码块
- 格式:static{}
- 特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发、只执行一次
- 使用场景:在类加载的时候做一些静态数据初始化的操作,以便后续使用。
static应用知识:单例
可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象。
-
饿汉单例模式
-
在用类获取对象的时候,对象已经提前为你创建好了。
-
设计步骤:
- 定义一个类,把构造器私有
- 定义一个静态变量存储一个对象
/** a、定义一个单例类 */ public class SingleInstance { /** c.定义一个静态变量存储一个对象即可 :属于类,与类一起加载一次 */ public static SingleInstance instance = new SingleInstance (); /** b.单例必须私有构造器*/ private SingleInstance (){ System.out.println("创建了一个对象"); } }
-
-
懒汉单例模式
-
在真正需要该对象的时候,才去创建一个对象(延迟加载对象)。
-
设计步骤:
- 定义一个类,把构造器私有。
- 定义一个静态变量存储一个对象。
- 提供一个返回单例对象的方法
-
/** 定义一个单例类 */
class SingleInstance{
/** 定义一个静态变量存储一个对象即可 :属于类,与类一起加载一次 */
public static SingleInstance instance ; // null
/** 单例必须私有构造器*/
private SingleInstance(){}
/** 必须提供一个方法返回一个单例对象 */
public static SingleInstance getInstance(){
...
return ...;
}
}