前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【举例】static声明内部类

【举例】static声明内部类

原创
作者头像
好派笔记
修改2021-10-08 14:52:41
2810
修改2021-10-08 14:52:41
举报
文章被收录于专栏:好派笔记
代码语言:javascript
复制
static声明内部类

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

代码语言:javascript
复制
/**
 * 延迟加载方式==懒汉模式
 * 使用双检测机制,尽量减小同步块的大小,同时保证线程安全
 */
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修饰,则表示这个变量只能在本类中的静态代码块或者静态成员方法使用,而不能通过类名直接引用。

代码语言:javascript
复制
OutterClass.InnerClass innerClass = new OutterClass().new InnerClass();

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档