专栏首页好派笔记【举例】static声明内部类
原创

【举例】static声明内部类

static声明内部类

   静态内部类是指在一个类的内部,又定义了一个用static修饰的类。它可以不依赖于外部类实例对象而被实例化,但他不能访问外部类的普通成员变量和普通成员方法,只能访问外部类的static成员(包括私有类型)。 一个没有被static修饰的内部类,必须要这么声明。

/**
 * 延迟加载方式==懒汉模式
 * 使用双检测机制,尽量减小同步块的大小,同时保证线程安全
 */
public class Test {
	private Test() {}

	private volatile static Test uniqueInstance;

	public static Test getInstance() {
		if (uniqueInstance == null) {
			synchronized (Test.class) {
				if (uniqueInstance == null) {
					uniqueInstance = new Test();
				}
			}
		}
		return uniqueInstance;
	}
}

  说明:

  1. 如果不进行同步,可能多个线程同时检测到uniqueInstance == null,就会出现取出多个实例的情况。
  2. 如果用synchronized同步整个getInstance()方法,会将线程中耗时较长,并且不需要同步的代码也锁上,导致效率太低。
  3. 如果没有第二个if (uniqueInstance == null) 检测,同样可能出现:多个线程同时检测到uniqueInstance == null,从而取出多个实例的情况。

  注意:若在static变量前用private修饰,则表示这个变量只能在本类中的静态代码块或者静态成员方法使用,而不能通过类名直接引用。

OutterClass.InnerClass innerClass = new OutterClass().new InnerClass();

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • static声明代码块内部类方式之一:推荐

    在内部类方式中,使用了一个专门的类来初始化Test。JVM将推迟Test的初始化操作,直到开始使用这个类时才初始化,并且由于通过一个静态初始化来初始化Test,...

    好派笔记
  • 例举Typescript声明文件写法

    声明文件是以.d.td为后缀的文件,文件名称与javascript文件名称一致。声明文件主要是解决js文件在Typescript中的使用问题,有了声明文件,编译...

    陨石坠灭
  • C++static声明静态局部变量 | 用static定义变量

    在C++中,有时会希望函数中局部变量的值在函数调用结束后不消失,而保留原来的值,也就是其占用的存储单元不释放,在下一次调用该函数时,这个变量还保留上一次函数调用...

    小林C语言
  • 内部类与枚举

    木瓜煲鸡脚
  • static关键字可以应用于内部类案例

    被static修饰的变量,叫静态变量或类变量;没有被static修饰的变量,叫实例变量。 两者的区别是: 静态变量属于类,在内存中只有一个复制(所有实例都指向...

    好派笔记
  • TypeScript - 类型声明、枚举、函数、接口

    4.自定义类型 当一些复杂类型需要多次使用,可以通过type来自定义类型,便于复用

    WahFung
  • 文章内容底部声明代码

    PHP开发工程师
  • Java——内部类使用总结(基本概念、定义内部类、static定义内部类、方法中定义内部类)

    类的组成包括:成员、方法,几乎所有程序都不会对嵌套程序有什么限定,内部类指的是在一个类中继续嵌套其他类结构的一种代码形式,且理论上可以一直嵌套。

    Winter_world
  • c++11:枚举类型(enum)的前向声明(forward declaration)

    在C++11之前,C++标准是不支持枚举类型的前向声明的。我说出这个结论,肯定有用msvc的童鞋不愿意了:口胡,MSVC明明就可以对枚举类型前向声明,下面这样的...

    用户1148648
  • JAVA-内部类实例

    张诺谦
  • 为什么JAVA中内部类前面要加static?

    java中有四种内部类的(成员,匿名,局部,静态) 静态内部类只是其中一种,静态的内容方便调用,不需要实例化

    用户7886150
  • Python中类的声明,使用,属性,实例

    注意这里的方法__intit__(self)下划线是前面两个下划线,后面两个下划线,并不是一个下划线。

    py3study
  • 025:为什么需要将Logger对象声明为private static final类型的

    有时候我会使用protected而不是private,只有一种情况下我会这么用:当我的设计中有继承体系,并且我希望继承体系里的对象都使用同一个日志对象时,就会在...

    阿杜
  • java初级笔记----final、static、匿名对象、内部类

    一、final 1、final可以用来修饰类,方法,成员变量, 2、final修饰类不可以被继承,但是可以继承其他类。 3、final修饰的方法不可...

    曼路
  • java中内部类中还有内部类请给实例!

    2.当内部类中还有一个内部类,下面给出了一个实例。【新手可忽略不影响继续学习】(以下多出代码, 用蓝色标记)

    马克java社区
  • Java 枚举类型 enum

    枚举类型是 Java 5 中增加的一个小特性,在此之前,实现枚举的方式为定义编译期常量形式。而代码中使用编译期常量的方式在理解性和安全性方面存在不足,单纯的常量...

    zhipingChen
  • Java中的枚举,竟然有这么多不为人知的知识点

    Java枚举,也称作Java枚举类型,是一种字段由一组固定常量集合组成的类型。枚举的主要目的是加强编译时类型的安全性。enum关键字是Java中的保留关键字。

    程序新视界
  • 设计模式之单例模式

    在学习设计模式时 , 我们尽量掌握每种模式的场景 , 意义 ,以及思维模式的转化 ,而不是死记硬背代码

    时间静止不是简史
  • Enum

    Enum是一种受限制的类,编译时IDE会为enum生成一个相关的类,这个类继承自 java.lang.Enum,且具有自己的方法

    晚上没宵夜

作者介绍

好派笔记

秦皇岛经济技术开发区易云软件开发服务部技术总监

秦皇岛经济技术开发区易云软件开发服务部 · 技术总监 (已认证)

专栏

精选专题

活动推荐

扫码关注云+社区

领取腾讯云代金券