public class Test {
    public static void main(String[] args) {  //入口文件 也属于静态方法  
                                              //静态方法只能调静态
                                             // 像直接在main里调用这个类的别的普通方法 是不可以的
                                              // 如果想调用 必须要new 对象
        System.out.println("单例设计模式");
        Back back=Back.getinBack();

        
        Back_2 back_2=Back_2.getback_2();
        Back_2 back_22=Back_2.getback_2();
        
        System.out.println(back_2==back_22);
        
        //final: 最终的
        //可以用来修饰 :类  方法 变量 
        //  最终类 不能继承  不能存在子类  这个类 不需要再扩展了 只能存在这么多功能
        //  比如 String类  System类 StringBuffer类 
        // 修饰方法 :子类不可重写 
        back.finalB();
        
        // 修饰变量  而不是属性 此时的变量就变成了常量 不能被修改
        final int num1 = 1;
        // 如果用来修饰属性的时候 要考虑修饰的位置 显示初始化修饰 代码块中初始化 构造器中初始化
        
        //static final 可以同时修饰 : 属性 方法  称作 全局常量 
        
        
        
    }
    
}

//final类
final class FinalA{
    
}


//饿汉 单例模式  用不用先把对象造好
class Back{
    
    //1. 要求私有化 构造器
    private Back() {
        System.out.println("私有构造器");
    }
    
    //2.内部创建类的对象
    private static Back insBack=new Back();
    
    
    private static void getCall() {
        System.out.println("我要说话了");
    }
    
    
    //提供公共的方法 返回对象
    public static Back getinBack() {
        return insBack;
    }
    
    public final void finalB() {
        System.out.println("最终方法");
    }
}

//懒汉 单例模式  啥时候用啥时候造
class Back_2{
    //1.私有构造器
    private Back_2() {
        System.out.println("私有构造器23");
    }
    
    // 2. 声明当前类对象 没有初始化
    private static Back_2 back_2=null;

    //提供公共的方法 返回对象
    public static Back_2 getback_2() {
        if(back_2 == null) {
            back_2=new Back_2();
        }
        return back_2;
    }
    

}


//懒汉式和饿汉式区别
// 饿汉式:
// 坏处 对象加载时间过长
// 好处 线程安全

// 懒汉式:
//  好处: 延迟对象创建
//  坏处: 线程不安全  到多线程内容修改为线程安全 

//单例模式--- 应用场景
//网站的计数器
//应用程序日志应用
//数据库连接池
// 读取配置文件的类