关键字(final static )静态内部类

本文详细介绍了Java中的final关键字和static的作用,包括它们在变量和方法上的应用。同时,文章探讨了不同类型的单例模式,如懒汉式、饿汉式、全局锁式、静态代码块、双重校验锁式、静态内部类式和枚举式,分析了各自的优缺点和线程安全性。特别推荐了静态内部类式和枚举式作为实现单例模式的最佳实践。
摘要由CSDN通过智能技术生成

final 关键字

变量 final int INTISIZE = 10 常量
方法 final void fun(){ } 不允许重写
类 final class String{ } 不能被继承

static 作用

1.变量

1)存储位置 静态-> 方法区
实例变量->堆
2) 静态->类有关 一个类只有一份静态变量
实例->对象有关,几个对象几份实例变量

2.方法

静态方法和实例方法的区别
1)调用方式不同:
静态方法:类名.静态方法
实例方法: 对象.实例方法
重写: 静态方法不能被重写 ,private方法不被重写
3)类
->内部类
静态内部类和实例内部类的区别:
是否包含外部类对象的this

  class SingleLink{
private Node  head;    
static class Node{
 private int value;
 public void fun(){ 
 head =null;
  }   } 
  }

单例模式

懒汉单例模式

懒汉单例模式和饿汉单例模式的区别就是:
懒汉创建了延迟对象,同时饿汉式的单例对象是被修饰为final类型
优点:尽最大可能节省内存空间
缺点:在多线程编程中,使用懒汉式可能造成类的对象在内存中不唯一,虽然用过修改代码可以改正这些问题,但是降低了效率 线程不安全

在这里插入图片描述
懒汉:用时才创建对象

饿汉单例

线程安全,安全是由类加载机制保证
在这里插入图片描述

全局锁式

线程安全,线程同步时效率不高(synchronized)
在这里插入图片描述

静态代码块

线程安全,类主动加载时才初始化实例,实现了懒加载策略,且线程安全
在这里插入图片描述

双重校验锁式

线程安全,且实现了懒加载策略,同时保证了线程同步时的效率。
但是volatile强制当前线程每次读操作进行时,保证其他所有线程写操作已完成。volatile使得JVM内部的编译器舍弃了编译时优化,对于性能有一定的影响
在这里插入图片描述

静态内部类式(推荐)

线程安全,不存在线程同步问题,且单例对象在程序第一次getInstance()时主动加载SingletonHolder 和 静态成员INSTANCE
在这里插入图片描述

枚举式

线程安全,不存在线程同步问题,且单例对象在枚举类型INSTANCE,第一次引用时通过枚举的 构造函数 初始化
这种方式是Effective Java 书籍提倡的方式。它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值