RuiCode

  • 首页
  • 归档

  • 搜索
操作系统 并发 排序 网络 源码分析 二分法 面试 不重复算法 指针移动 java 算法 mysql Linux

【面试经】JAVA基础知识(三)-- static、volatile关键字 、不可变类

发表于 2020-02-14 | 分类于 面试经 | 0 | 阅读次数 339
  1. static关键字
  • static类或者接口:外部类不可以,内部类可以。静态内部类可以不依赖外部类对象的实例化,例如一个实现静态接口Map.Entry的内部静态类,而且只能访问外部类的静态成员和静态方法
  • static代码块:只在类中。JVM加载类时执行,一般只会执行一次。
  • static成员变量:静态成员变量属于类,所有对象的static变量都指向同一个内存地址
  • static成员方法:静态方法不能使用this,super,非静态成员变量,非静态方法;static不可以放在构造方法之前,静态内部类、静态方法也可以访问构造方法。
class Singleton{
private volatile static Singleton singleton;
private Singleton(){};
public static Singleton getInstance(){
	if(singleton == null){
		synchronized(Singleton.class){
			if(singleton == null){
				singleton = new Singleton();
			}
		}
	}
	return singleton;
}
}
class Singleton{
private Singleton(){};
private static class Holder{
	private static final Singleton INSTANCE = new Singleton();
}
public static final Singleton getInstance(){
	return Holder.INSTANCE;
}
}
  1. volatile关键字
  • 为保证多线程时,对成员变量读取一致。
  • 原理:一般地,编译器对于常用的变量采取缓存策略,程序在读取变量时直接读取缓存,多线程时线程之间的缓存可能不一致。增加volatile,强制编译器不使用缓存策略,程序直接从对应的内存当中提取。
  • 当类中有一个成员变量时,靠volatile可以保证多线程安全;当类中有多个成员变量时,单靠volatile不可以保证多线程安全。
  1. 不可变类
  • 不可变类指的是创建对象时,所有的成员变量就不能被修改。
  • 一般地,不可变类不允许有set方法,get方法和构造方法需要对成员变量的赋值和存取采取clone模式。 如 this.date = (DateLocalTime)d.clone();
  • String、Integer都是不可变类。
  • 确保所有方法或者类用final修饰,保证子类不可覆写。
  • 本文作者: RuiCode
  • 本文链接: https://www.ruicode.cn/archives/面试经java基础知识三
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 操作系统 # 并发 # 排序 # 网络 # 源码分析 # 二分法 # 面试 # 不重复算法 # 指针移动 # java # 算法 # mysql # Linux
【面试经】java基础知识(二)-- 抽象类、内部类、父类、final修饰符
【面试经】JAVA基础知识(四)-- 数据类型及其封装
  • 文章目录
  • 站点概览
RuiCode

RuiCode

19 日志
5 分类
13 标签
Creative Commons
© 2021 RuiCode
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4

冀公网安备 13050002001906号