1.访问类的编译期静态常量时,不会触发类的初始化行为。类的初始化行为是指在类被加载之后(也就是类的Class对象被创建之后),为类的静态成员变量分配存储空间。 2.编译期静态常量会在编译阶段被存储到NonInitialization类的常量池中,在以后对编译期静态常量的引用都实际上被替换为对NonI ...
分类:
其他好文 时间:
2018-12-07 20:55:57
阅读次数:
190
1. static变量,包括内置数据类型和自定义对象是在何时进行内存分配和初始化的? 全局变量,文件域静态变量,类的静态成员变量在mian函数执行之前的静态初始化过程中分配内存并进行初始化。 局部静态变量,在第一次使用时分配内存并进行初始化。 以上规则适用于内置数据类型和自定义对象类型。 2. st ...
分类:
编程语言 时间:
2018-11-24 14:18:13
阅读次数:
207
1. 下面程序的运行结果是什么? 这个考察的是类的初始化顺序,一般是父类的静态变量,静态代码块 子类的静态成员,静态代码块 父类的成员变量 父类的初始化块(就是直接用大括号扩起来的,平时不常见) 父类的构造函数 子类的成员变量 子类的初始化块 子类的构造函数 运行结果如下: 2.用最有效率的方法计算 ...
分类:
其他好文 时间:
2018-11-22 10:43:33
阅读次数:
175
使用static关键字修饰的变量、常量和方法分别被称作静态变量、静态常量和静态方法,也被称作类的静态成员 静态变量 使用static修饰过的类变量称为静态变量 该变量需要使用类名.变量名进行调用,不能使用对象名/this进行调用 在类方法中不能定义与静态变量同名的局部变量 静态方法 静态方法与静态变 ...
分类:
编程语言 时间:
2018-11-15 10:21:08
阅读次数:
172
volatile关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的 可见性 ,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2)禁止进行 指令重排序 。 方式一:变量不使 ...
分类:
其他好文 时间:
2018-11-11 16:53:34
阅读次数:
187
类需要经过 加载, 连接, 初始化三个步骤来进行初始化. 加载是把class文件读入内存创建一个class对象, 连接分为三步,第一步是验证是否是正确的结构, 第二步是准备, 为类的静态成员分配内存,初始化默认值, 第三步是解析, 将类的二进制数据中的符号替换为直接引用.初始化是静态代码块,构造代码 ...
分类:
编程语言 时间:
2018-10-28 20:37:08
阅读次数:
183
JAVA的初始化顺序: 父类的静态成员初始化>父类的静态代码块>子类的静态成员初始化>子类的静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造方法 注意: 1.静态成员和静态代码块只有在类加载的时候执行一次,再次创建实例时,不再执行,因为只在方法区存在一份,属于一整个类。 2.上述的 ...
分类:
编程语言 时间:
2018-10-19 20:50:57
阅读次数:
127
未完成的需求: 上图中的第三条我们没有完成。 上一节的程序中,我们每次打印对象数目的时候都要依赖一个对象名,当对象为0时,我们就无法获得对象数目。 解决方案1: 将静态成员变量改为public的,这样我们就可以直接访问了,随时可以获得对象的数目。 如下: 上面程序可以得到正确的结果,但是安全性得不到 ...
分类:
其他好文 时间:
2018-09-01 16:23:50
阅读次数:
181
成员变量的回顾: 新的需求: 使用全局变量可以解决这个问题,但是使用全局变量在当代的软件开发中是不受欢迎的。 静态成员变量: 静态成员变量的生命期如同全局变量一样,就是程序的运行周期。 由于静态成员变量不属于某个对象,而是属于这个类的,因此,静态成员变量不可能占用对象的空间,所以静态成员变量只能在类 ...
分类:
其他好文 时间:
2018-09-01 15:59:53
阅读次数:
122
默认为实例成员,static为静态成员 实例成员只能在实例化的时候用 静态成员只能被类访问 如图所示,类只能访问到静态成员,不能访问到实例成员 如图所示,实例化后能够访问到实例成员,不能访问到静态成员 ...
分类:
其他好文 时间:
2018-08-25 11:22:39
阅读次数:
103