Java编译时常量和运行时常量

更新时间:2023-06-04 04:23:58 阅读: 评论:0

Java编译时常量和运⾏时常量
the sound of music
白发怎么治Java编译时常量和运⾏时常量
编译期常量指的就是程序在编译时就能确定这个常量的具体值。
⾮编译期常量就是程序在运⾏时才能确定常量的值,因此也称为运⾏时常量。
在Java中,编译期常量指的是⽤final关键字修饰的基本类型或String类型并直接赋值(⾮复杂运算)的变量(⽆论是否⽤static修饰),是编译器的⼀种优化,体现在字节码⽂件中;运⾏是常量是由运⾏时解释器解释完成的。
运⾏时常量很容易理解,接下来会简单的结合字节码⽂件来介绍编译时常量及使⽤风险。吸血鬼日记第三季剧情介绍
public class ConstantTest {
public final int a = 1;    //编译时常量
public final int b = 1+2;  //编译时常量⽀持加减乘除等简单运算
public final int c = b+3;  //编译时常量
public final static int d = 10;  //编译时常量
public final String str1 = "abc"; //编译时常量
单词翻译public final String str2 = "def" + "ghi";  //编译时常量⽀持字符串的连接
public final String str3 = str2 + "jkl";  //编译时常量digin
public final static String str4 = "static str";  //编译时常量
public final double e = Math.random(); //运⾏时常量
public final ConstantTest test = new ConstantTest(); //运⾏时常量
}
下⾯是编译后相应的字节码信息:
注意
类B中所有引⽤类A中⽤static final修饰的静态编译时常量都会在编译时全部替换为相应的数值或字符串,所以当修改了类A中的静态编译时常量时,类A和类B都要重新编译,如果只重新编译类A,则类B还是会引⽤之前的常量。
以下是案例:
类ConstantTest:
public class ConstantTest {
public final int a = 1;
public final int b = 1+2;
新东方英语下载
public final int c = b+3;
public final static int d = 10;
public final String str1 = "abc";
public final String str2 = "def" + "ghi";
经典英语文章public final String str3 = str2 + "jkl";
public final static String str4 = "static str";
public final double e = Math.random();
public final ConstantTest test = new ConstantTest();
}
类Test引⽤ConstantTest中的静态编译时常量:
public class Test{
public int m = ConstantTest.d;
public static int n = ConstantTest.d;
public final int g = ConstantTest.d;
public static final int j = ConstantTest.d;
public static void main(String[] args) {
int k = ConstantTest.d;
System.out.println("m="+new Test().m);
System.out.println("n="+n);
System.out.println("g="+new Test().g);
System.out.println("j="+j);
agada
System.out.println("k="+k);
}
}
  ⾸先全部编译,运⾏Test类:
  修改ConstantTest中静态常量的值为20后只重新编译ConstantTest,运⾏结果:
动名词作宾语  重新编译Test后,运⾏结果:雅思网校
  最后总结⼀下:
1. 编译期常量指的是⽤final关键字修饰的基本类型或String类型并直接赋值(⾮复杂运算)的变量(⽆论是否⽤static修饰);
2. 运⾏时常量是程序在运⾏时才能确定值的⼀种常量;
3. 所有引⽤其他类中静态编译时常量(⼀般就叫静态常量,⽤static final修饰)的类在字节码中全部替换为相应常量的值,所以引⽤静态
常量并不会触发该类的的初始化。

本文发布于:2023-06-04 04:23:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/855783.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:常量   编译   类型   静态   修饰   相应   字节   替换
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图