博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
finalkeyword对JVM类载入器的影响
阅读量:7262 次
发布时间:2019-06-29

本文共 669 字,大约阅读时间需要 2 分钟。

众所周知,当訪问一个类的变量或方法的时候。假设没有初始化该类。就会先去初始化一个类

可是,当这个类的变量为final的时候,就不一定了

请看以下的样例

package com.lala.shop;import java.util.Random;public class App {    public static void main(String[] args)    {        System.out.println(User.c);    }}class User{	public static final int b = new Random().nextInt(11);	public static final int c = 20;	static	{		System.out.println("user static init ...");	}}
当訪问

System.out.println(User.c);

的时候,没有输出 "user static init ..."

由于c是static final变量。且它等于20。在编译的时候就能够知道它的值。所以直接訪问a的值不会引起User类的初始化

当訪问

System.out.println(User.b);

的时候。就输出"user static init ..."

这个static final变量b由于在编译的时候无法知道它的确切的值。所以仅仅有等到执行的时候才干知道,所以自己訪问

User.b会引起User类的初始化。也就是static静态代码快的载入

转载地址:http://uoddm.baihongyu.com/

你可能感兴趣的文章
正则表达式
查看>>
深入Android消息机制
查看>>
rds 签名机制事例及补充说明
查看>>
第十七章:掌握网格(七)
查看>>
POJ 1804
查看>>
Bioconductor的地基--IRanges
查看>>
UML类图关系大全
查看>>
Android Data Binding
查看>>
CSS:hover选择器
查看>>
git三种add指令的意义和区别
查看>>
nodejs express 启动报错:Error: Cannot find module 'xxx'
查看>>
Eclipse的maven项目自动重置jdk版本的问题
查看>>
JMeter工具简单介绍
查看>>
关于CLR、CIL、CTS、CLS、CLI、BCL和FCL 的区分与总结
查看>>
IntelliJ IDEA 2019.1 Beta2 发布,增加对外部资源的支持
查看>>
FreeDOS 24 周年,创始人分享常用 DOS 命令备忘表
查看>>
js中的call() apply()
查看>>
laravel Route::controller 使用路由命名
查看>>
Vmware vSphere hypervisor 6.5 安装教程
查看>>
程序员永远修不好的Bug——情人节
查看>>