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

Posted 小布丁value

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关键字(final static )静态内部类相关的知识,希望对你有一定的参考价值。

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 书籍提倡的方式。它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象

在这里插入图片描述

以上是关于关键字(final static )静态内部类的主要内容,如果未能解决你的问题,请参考以下文章

Java_static关键字,单例设计模式,代码块,final关键字,接口,内部类

Java基础 -- 关键字Static和Final

static和final

static关键字和final关键字

关于 static 和 final 的一些理解

static介绍内部类final权限修饰符的作用范围