1. static应用知识:代码块
「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」
代码块分为: 静态代码块,构造代码块。
代码块概述:
代码块是类的5大成分之一(成员变量,构造器,方法,代码块,内部类),定义在类中的方法外。
在java类下,使用{} 括起来的代码被称为代码块。
代码块分为: 静态代码块: 需要通过static关键字修饰,随着累的加载而加载,并且自动触发,只执行一次。 使用场景: 在类加载的时候做一些静态数据初始化的操作,以便后续使用。
构造代码块: 每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行。 使用场景:初始化实例资源。
public class TestDemo1 {
public static String shoolName;
// 与类一起加载,自动触发一次,优先执行
// 作用:可以在程序加载时进行静态数据的初始化操作(做准备内容)
static{
System.out.println("静态代码块被触发");
shoolName = "中国人民大学";
}
public static void main(String[] args) {
// 学习静态代码块的特点,基本作用
System.out.println("main方法执行输出");
System.out.println(shoolName);
}
}
构造代码块,与对象一起加载。
public class TestDemo2 {
private String name;
// 属于对象的,与对象一起加载,自动触发执行。
{
System.out.println("==构造代码块被触发执行==");
name = "ddd";
}
public TestDemo2(){
System.out.println("==构造器被触发执行==");
}
public static void main(String[] args) {
TestDemo2 t = new TestDemo2();
System.out.println(t.name);
new TestDemo2();
}
}
static应用知识:单例设计模式
什么事设计模式:
设计模式是一套被前任反复使用,多人知晓,经过分类编目的代码设计经验的总结,后来者可以直接拿来解决问题。 设计模式是软件设计中常见的解决方法,好的设计模式,可以进一步的提高代码的重用性。
单例模式: 可以保证系统中,应用该模式的这个类永远只有一个实例,一个类永远只能创建一个对象。
单例的场景和作用:
例如任务管理器对象我们只需要一个就可以解决问题了,这样可以节省内存空间。
恶汉单例设计模式: 在类获取对象的时候,对象已经提前为你创建好 了。
设计步骤: 定义一个类,把构造器私有。
定义一个静态变量存储一个对象。
public class SingleInstance {
// 定义一个公开的静态的成员变量存储一个类的对象,
public static SingleInstance instance = new SingleInstance();
// 把构造器隐藏起来
private SingleInstance(){
}
}
public class Test {
public static void main(String[] args) {
SingleInstance s1 = SingleInstance.instance;
SingleInstance s2 = SingleInstance.instance;
SingleInstance s3 = SingleInstance.instance;
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
打印的内存地址都一样。
饿汉单例的实现步骤?
定义一个类,把构造器私有
定义一个静态变量存储一个对象
懒汉单例模式:
在真正需要该对象的时候,才去创建一个对象,延迟加载对象。
设计步骤: 定义一个类,把构造器私有。 定义一个静态变量存储一个对象。 提供一个返回单例对象的方法。
public class SingleInstance2 {
// 创建一个静态的成员变量存储本类的独享,注意:此时不能初始化对象
private static SingleInstance2 instance;
// 私有构造器
private SingleInstance2(){
}
// 定义一个方法,让其他地方可以来调用获取一个对象
public static SingleInstance2 getInstance(){
if (instance == null){
// 第一次来获取对象
instance = new SingleInstance2();
}
return instance;
}
}
public class Test {
public static void main(String[] args) {
SingleInstance2 s1 = SingleInstance2.getInstance();
SingleInstance2 s2 = SingleInstance2.getInstance();
SingleInstance2 s3 = SingleInstance2.getInstance();
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}