Final关键字对JVM类加载器的影响
来源:互联网 发布:tcpip协议网络层包括 编辑:程序博客网 时间:2024/05/27 00:32
当一个类中有声明为static final的变量,这样的变量对类的加载器有一定的影响,首先看看下面的例子。
package com.bird.classLoad;class FinalTest{public static final int a = 6/3;static{System.out.println("FinalTest static block");}}public class Test3 {public static void main(String[] args) {System.out.println(FinalTest.a);}}
因为a是static final变量,且它等于6/3,在编译的时候就可以知道它的值,所以直接访问a的值不会引起FinalTest类的初
始化。作为表现,也就是static静态代码快不会被加载。
运行结果为
2
在看一个例子
package com.bird.classLoad;import java.util.Random;class FinalTest4{public static final int a = new Random().nextInt(100);static{System.out.println("FinalTest4 static block");}}public class Test4 {public static void main(String[] args) {System.out.println(FinalTest4.a);}}
这个static final变量a因为i在编译的时候无法知道它的确切的值,所以只有等到运行的时候才能知道,所以自己访问
FinalTest4.a会引起FinalTest4类的初始化。也就是static静态代码快的加载。
运行结果为
FinalTest4 static block82
下面的例子是讲,当子类被主动访问的时候,会引起其直接父类的初始化
package com.bird.classLoad;class Parent{static int a = 3;static{System.out.println("Parent static block");}}class Child extends Parent{static int b = 4;static{System.out.println("Chind static block");}}public class Test5 {public static void main(String[] args) {System.out.println(Child.b);}}
因为直接访问Child,b,会先初始化Parent类,然后初始化Child类。
运行结果为
Parent static blockChind static block4
如果通过子类直接访问父类的变量,只会初始化父类而不会初始化子类
package com.bird.classLoad;class Parent{static int a = 3;static{System.out.println("Parent static block");}}class Child extends Parent{static{System.out.println("Chind static block");}}public class Test5 {public static void main(String[] args) {System.out.println(Child.a);}}
直接访问Parent类的a变量,则只会直接初始化parent类,不会初始化Child类
运行结果如下
Parent static block3
- Final关键字对JVM类加载器的影响
- Final关键字对JVM类加载器的影响
- Final关键字对JVM类加载器的影响
- final关键字对JVM类加载器的影响
- java不同类加载器对instanceof关键字运算的影响
- JVM对final的支持
- 深入java static关键字 在继承场景中jvm类加载器对其进行的优化
- 深入java final关键字 用法注意点和JVM对其进行的优化(例子)
- final关键字对变量、方法以及类的作用
- Java JVM设置对性能的影响
- JVM参数对J2ee的影响
- 指针逃逸对JVM性能的影响
- 对Java中final关键字的理解
- 网站权重对长尾关键字的影响
- jvm加载Final修饰的变量时,类是否需要加载
- java static块异常对类加载的影响
- 深入JVM之类的主动使用和final关键字
- initialize Class-static 以及final对class初始化的影响
- 西游记,冷笑话集合
- tomcat 6.0 虚拟路径
- 放慢脚步,寻找快乐
- C++模板类/模板函数的BUG
- as类成员变量的特殊用法
- Final关键字对JVM类加载器的影响
- 汇编语言复习笔记
- Windows Phone应用程序开发Hello Windows Phone(6)
- 决策树模型组合之随机森林与GBDT
- Struts2的OGNL与struts2标签
- 设置Listview 的选中背景效果 背景变蓝字变白
- discuz论坛框架
- Struts 2读书笔记-----Struts 2实现文件过滤
- Struts2 - HelloWorld(从零开始学习Strust2_01)