文档章节

为什么类的静态成员变量要在类外初始化

Amamatthew
 Amamatthew
发布于 2014/06/01 20:28
字数 376
阅读 113
收藏 0

1. 在类中,一般只是声明静态成员变量,但是并没有定义。

2. 声明只是表明了静态成员变量的数据类型和属性,但是并不分配内存;
3. 普通成员是“对象(实例)级别”的。而静态成员是“类级别”的,它和类的地位等同,属于类级别的成员,因此它应该先于该类任何对象的存在而存在,应该被该类的所有对象所共享。
4. 现在,假定要实例化该类的一个对象,如果之前没有定义过类的静态成员变量,那么这个时候静态成员变量这个时候肯定要定义,那么会发生什么样的事情?这时候才去定义那个静态成员吗?显然是不合适的。

因为,如果有另外一个线程也要创建该类的对象,那么按照这个方式去定义那个静态成员,会产生两种可能的情况:

1. 重复定义;

2. 就算不产生重复定义的情况,也会产生竞争,甚至死锁,以至于对象无法创建。

显然,编译器不能这么干。那么很合理的解决办法,就是事先在类的外部把它定义好,然后再供所有的对象共享。不过注意,类的静态常量成员可以类内初始化。

© 著作权归作者所有

共有 人打赏支持
Amamatthew
粉丝 67
博文 1050
码字总数 76443
作品 0
厦门
后端工程师
java学习笔记--内部类:(参考java核心技术卷1and转载)

做JavaEE即网站的 基本不接触内部类 做安卓的 基本天天接触内部类 内部类是定义在另一个类中的类 可以分为这四类: 局部内部类 成员内部类 与外部类有直接联系 静态内部类 与外部类没有直接联...

codingcoge
04/27
0
0
Java之static作用的全方位总结

1、深度总结   引用一位网友的话,说的非常好,如果别人问你static的作用;如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的;如果是说 可以构成 静态代码块,那别人认为你还可以...

小勇DW3
08/14
0
0
Java中内部类

1.四种内部类:成员内部类、局部内部类、匿名内部类和静态内部类。 2.成员内部类 2.1成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。 2.2成员内部类...

指尖Coding
2016/09/18
18
0
类的二三事

类 类的基本思想就是数据抽象和封装。数据抽象依赖于接口和实现。接口指类外成员对象可使用的函数接口。实现指类的成员函数和成员变量。封装实现了接口和实现的分离。 类本身就是一个作用域。...

sdoyuxuan
2017/04/07
0
0
内部类, 静态内部类, 局部类, 匿名内部类的解析和区别

众所周知,外部顶级类的类名需和类文件名相同,只能使用public和default。而内部类是指在外部类的内部再定义一个类,类名不需要和文件名相同。内部类可以是静态static的,也可用public,def...

翻滚吧李博
2017/12/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

74.expect脚本同步文件以及指定host同步文件 构建分发系统文件和命令

20.31 expect脚本同步文件: 在expect脚本中去实现在一台机器上把文件同步到另外一台机器上去。核心命令用的是rsync ~1.自动同步文件 #!/usr/bin/expect set passwd "123456" spawn rsync -a...

王鑫linux
22分钟前
0
0
TypeScript项目引用(project references)

转发 TypeScript项目引用(project references) TypeScript新特性之项目引用(project references) 项目引用是TypeScript 3.0中的一项新功能,允许您将TypeScript程序构建为更小的部分。 通过这...

durban
26分钟前
0
0
爬虫入门

导读 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以自动采集所有其能够访问到的页面内容,以获取...

问题终结者
26分钟前
0
0
ppwjs之bootstrap文字排版:无序列表项不换行

<!DOCTYPT html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>ppwjs欢迎您</title><link rel="icon" href="/favicon.ico" ......

ppwjs
33分钟前
0
0
SpringBoot 学习一

本文将从以下几个方面介绍: 前言 HelloWorld 读取配置文件 例子(CURD) 前言 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架...

tsmyk0715
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部