常量是程序运行期间恒定不变的量,许多程序设计语言都有某种方式,向编译器告知一块数据是恒定不变的,例如C++中的const和Java中的final. 根据编译器的不同行为,常量又分为编译时常量和运行时常量,其实编译时常量肯定就是运行时常量,只是编译时常量在编译的时候就被执行计算,并带入到程序中一切可能用到它的计算式中. 以Java为例,static final int a = 1将是一个编译时常量,编译后的符号表中将找不到a,所有对a的引用都被替换成了1. 而static final int b
今天在看书的时候遇到了一个不是很懂的名词,是在think in java 这本书的第七章讲final关键字时讲到的.然后自己在网上查了一下知道了一些. 编译器常量就是:它的值在编译期就可以确定的常量.也就是说在编译的时候就已经为用到这些常量的地方赋好值了.下边这段程序可以很好地帮助我们找出哪些是编译期常量哪些不是. package com.wenge.compileTest; public class CompileTest{ public static void main(String arg
编译期 静态成员 私有变量 成员变量 运行期 非静态方法 package day1401; public class Test1 { public static void main(String[] args) { B b = new B(); A a = new B(); // 运行期, 并绑定到子类方法 b.p(); a.p(); // 编译期查找 // 编译期根据变量 a 的类型定义, // 在这个类中查找 f()方法并绑定 B.f(); A.f(); /* * 编译期绑定 * */ Sy
Java“编译期”是一段“不确定”的操作过程:可能是指一个前端编译器(编译器的前端)把*.java文件转变为*.class文件的过程:可能是指虚拟机的后端运行期编译器(JIT编译器,Just In Time Compiler)把字节码转变为机器码的过程:可能是指使用静态提前编译器(AOT编译器,Ahead Of Time Compiler)直接把*.java文件编译成本地机器代码的过程.这三类编译过程中一些比较有代表性的编译器: 前端编译期:Sun的Javac/EclipseJDT中的增量式编译
Java编译时常量和运行时常量 编译期常量指的就是程序在编译时就能确定这个常量的具体值. 非编译期常量就是程序在运行时才能确定常量的值,因此也称为运行时常量. 在Java中,编译期常量指的是用final关键字修饰的基本类型或String类型并直接赋值(非复杂运算)的变量(无论是否用static修饰),是编译器的一种优化,体现在字节码文件中:运行是常量是由运行时解释器解释完成的. 运行时常量很容易理解,接下来会简单的结合字节码文件来介绍编译时常量及使用风险. public class Consta
注意:const编译期常量是编译的时候就确定的,可以查看IL代码,是写死的.如果另一个程序集引用后,该程序集没有进行编译,则值不会改变. 看效果: 项目中有2个程序集: 其中:常量在这个程序集中定义并初始化. namespace ConstReadOnlyTest { public class Class1 { public const string a= "我是const常量."; public static string b = "我是static变量."; p