static、final关键字与单例模式

面向对象(二)

1. static关键字

可以用来修饰的结构:主要用来修饰类的内部结构

属性、方法、代码块、内部类

是否使用static修饰可分为静态属性和非静态属性(实例变量)

特点:
  • 静态变量随着类的加载而加载,可以通过“类.静态变量”的方式进行调用

  • static加载的结构早于对象的创建

  • 只要权限允许,可以通过“对象.static属性”的方式进行调用

  • 静态变量存在于方法区的静态域中

2. final 关键字

final可以修饰类、变量(属性 + 局部变量)、方法

  1. final用来修饰一个类,不能被其他类所继承
  2. final用来修饰方法,方法不能被重写
  3. final用来修饰变量,此时变量就称为一个常量,修饰属性考虑赋值位置:显式初始化,代码块初始化,构造器初始化。static final 用来修饰属性:全局常量。
3.单例模式
特点:
  • 单例设计模式保证一个类只有一个实例。
  • 要提供一个访问该类对象实例的全局访问点。
3.1 饿汉式(预先加载方式)
设计步骤:
  1. 提供私有构造器

  2. 内部创建类的对象

  3. 提供公共的静态方法,返回类的对象

  4. 要求此对象也必须声明为静态的

    特点: 对象预先加载,线程是安全的,在类创建好的同时对象生成,调用获得对象实例的方法反应速度快,代码简练。

    class Bank{
        private Bank{
            
        }
        
        private static Bank instance = new Bank();
        
        public static Bank getInstance(){
            return instance;
        }
    }
    public class BankTest{
        public static void main(String[] args){
            Bank bank1 = Bank.getInstance();
    		Bank bank2 = Bank.getInstance();
    		System.out.println(bank1 == bank2);
        }
    }
    
    
3.2 懒汉式(延迟加载方式)
设计步骤:
  1. 提供私有构造器
  2. 声明当前类对象,没有初始化
  3. 声明public、static的方法返回当前类的对象
  4. 要求此对象也必须声明为静态的

特点:对象延迟加载,效率高,只有在使用的时候才实例化对象,但若设计不当线程会不安全,代码相对于饿汉式复杂,第一次加载类对象的时候反应不快。

class Order{
    private Order{
        
    }
    private static Order instance = null;
    
    public static Order getInstance(){   //多線程安全
    	if(instance == null){
    		synchronized(Order.class){
        		if(instance == null){
           			 instance = new Order();
       			 }
   			 }
		}
		return instance;
	}
}
4.类的属性赋值

方式顺序:

①默认初始化

②显示初始化 / ⑤代码块中初始化 (看先后顺序)

③构造器初始化

④通过"对象.属性"或"对象.方法"的方式赋值

执行先后顺序: ① - ② / ⑤ - ③ - ④

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值