文档章节

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

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

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

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

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

1. 重复定义;

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

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

© 著作权归作者所有

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

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

codingcoge ⋅ 04/27 ⋅ 0

Java中内部类

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

指尖Coding ⋅ 2016/09/18 ⋅ 0

类的二三事

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

sdoyuxuan ⋅ 2017/04/07 ⋅ 0

关于C++类的静态数据为什么一定要初始化

我们知道C++类的静态成员变量是需要初始化的,但为什么要初始化呢。 其实这句话“静态成员变量是需要初始化的”是有一定问题的,应该说“静态成员变量需要定义”才是准确的,而不是初始化。 ...

juny ⋅ 2014/04/05 ⋅ 0

关于Java对象的继承和多态学习笔记

-------------------------关于对象的构造过程------------------------ 如果类B继承了类A,那么当创建类B的实例时,遵循如下过程: 1、如果类A有静态的成员变量,初...

mj4738 ⋅ 2012/01/15 ⋅ 1

第十章 内部类

本文转载自牛客网 往OuterClass类的代码段中插入内部类声明, 哪一个是错误的问题的第一个解析。 可以将一个类的定义放在另一个类的内部,这就是内部类 1.为什么使用内部类? 使用内部类最吸引...

notis ⋅ 2017/10/26 ⋅ 0

C++中特殊变量的初始化方法

1.特殊变量 引用(&) :引用和常引用 常量(const) 静态(static) :普通静态和静态常量((整数类型(integral types:int、char、bool、)和非整数类型) 2.初始化方法 常量(const)和...

走向世界的男子 ⋅ 2016/10/25 ⋅ 0

【JavaSE(三)】Java面向对象(上)

原文地址:https://www.cloudcrossing.xyz/post/35/ 面向对象是基于面向过程的编程思想。 面向过程:强调的是每一个功能的步骤; 面向对象:强调的是对象,然后由对象去调用功能。 Java程序的...

苍云横渡 ⋅ 05/10 ⋅ 0

Java内部静态类

解析静态内部类的使用目的与限制。在开发过程中,内部类中使用的最多的还是非静态地成员内部类。不过在特定的情况下,静态内部类也能够发挥其独特的作用。 现在我们看组例子: public class...

John_Zhang ⋅ 2011/05/14 ⋅ 0

Java 走向C++

本文不涉及一些微妙蛋疼的语法比较, 关注的是宏观方面, 当然后期逐步更新如果, 如果觉得必要, 可能会加上. 议题之一: 初始化的比较 1. CPP基类的任何类构造函数会默认调用父类的不带参数的构...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

NFS介绍 NFS服务端安装配置 NFS配置选项

NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导...

lyy549745 ⋅ 33分钟前 ⋅ 0

Spring AOP 源码分析 - 筛选合适的通知器

1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析。本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出合适的通知器(Advisor...

java高级架构牛人 ⋅ 56分钟前 ⋅ 0

HTML-标签手册

标签 描述 <!--...--> 定义注释。 <!DOCTYPE> 定义文档类型。 <a> 定义锚。超链接 <abbr> 定义缩写。 <acronym> 定义只取首字母的缩写。 <address> 定义文档作者或拥有者的联系信息。 <apple......

ZHAO_JH ⋅ 58分钟前 ⋅ 0

SylixOS在t_main中使用硬浮点方法

问题描述 在某些使用场景中,应用程序不使用动态加载的方式执行,而是跟随BSP在 t_main 线程中启动,此时应用代码是跟随 BSP 进行编译的。由于 BSP 默认使用软浮点,所以会导致应用代码中的浮...

zhywxyy ⋅ 今天 ⋅ 0

JsBridge原理分析

看了这个Github代码 https://github.com/lzyzsd/JsBridge,想起N年前比较火的Hybrid方案,想看看现在跨平台调用实现有什么新的实现方式。代码看下来之后发现确实有点独特之处,这里先把核心的...

Kingguary ⋅ 今天 ⋅ 0

Intellij IDEA神器常用技巧五-真正常用快捷键(收藏级)

如果你觉得前面几篇博文太啰嗦,下面是博主多年使用Intellij IDEA真正常用快捷键,建议收藏!!! sout,System.out.println()快捷键 fori,for循环快捷键 psvm,main方法快捷键 Alt+Home,导...

Mkeeper ⋅ 今天 ⋅ 0

Java 静态代码分析工具简要分析与使用

本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,...

Oo若离oO ⋅ 今天 ⋅ 0

SpringBoot自动配置小记

spring-boot项目的特色就在于它的自动配置,自动配置就是开箱即用的本源。 不过支持一个子项目的自动配置,往往比较复杂,无论是sping自己的项目,还是第三方的,都是如此。刚接触会有点乱乱...

大_于 ⋅ 今天 ⋅ 0

React jsx 中写更优雅、直观的条件运算符

在这篇文字中我学到了很多知识,同时结合工作中的一些经验也在思考一些东西。比如条件运算符 Conditional Operator condition ? expr_if_true : expr_if_false 在jsx中书写条件语句我们经常都...

开源中国最帅没有之一 ⋅ 今天 ⋅ 0

vim编辑模式与命令模式

5.5 进入编辑模式 从编辑模式返回一般模式“Esc” 5.6 vim命令模式 命令 :“nohl”=no high light 无高亮,取消内容中高亮标记 "x":保存退出,和wq的区别是,当进入一个文件未进行编辑时,使...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部