`
Chihom
  • 浏览: 6050 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java编译期常量static final

阅读更多
下面的两个初始化例子
class InitalizedClass {
	static {
		System.out.println("You have initalized InitalizedClass!");
	}
	public static int inititalize_varible = 1;

}

public class TestInitializeClass {
	public static void main(String[] args) {
		System.out.println(InitalizedClass.inititalize_varible);

	}

}

上面的结果是:
You have initalized nitalizedClass!
1

再看下面的例子
class InitalizedClass {
	static {
		System.out.println("You have initalized InitalizedClass!");
	}
       //和上面的例子唯一的差异就是此处的变量INITIALIZED_VARIBLE被声明为final
	public final static int INITIALIZED_VARIBLE = 1;

}

public class TestInitializeClass {
	public static void main(String[] args) {
		System.out.println(InitalizedClass.INITIALIZED_VARIBLE);

	}

}

上面的结果是:
1

为什么两个例子执行结果不一样,原因是第二个例子中的INITIALIZED_VARIBLE为编译期常量,它不会导致类的初始化的
2
0
分享到:
评论
1 楼 Water_HHH 2012-06-27  
    

相关推荐

    java学习教程之常量折叠详解

    编译期常量是指编译的时候就可以确定其值的常量,包括字面量、编译期常量进行简单运算的结果、被编译器常量赋值的final的基本类型和字符串变量等。 常量折叠的优点是可以提高代码的执行效率,因为它可以在编译期间...

    探究Java常量本质及三种常量池(小结)

    Java中的常量池是Java虚拟机(JVM)中的一种机制,用于存储编译期常量和运行期常量。常量池是JVM中的一种重要机制,它可以将常量存储在内存中,并提供快速的访问和共享机制。 Java中的常量池有三种形态:静态常量池...

    Java中final的用法.doc

    `final`关键字可以用来创建编译期常量,这些常量的值在编译时就已经确定,且在程序运行过程中不能被修改。例如: ```java final int MY_CONSTANT = 10; ``` 一旦赋值,`MY_CONSTANT`的值就不能再更改。对于基本...

    Java堆、栈和常量池——内存剖析

    - 编译期已知的字符串常量会被存储在常量池中,例如直接用双引号定义的字符串。 - 运行期间通过`new String()`方式创建的字符串会被存储在堆中。 - 相同内容的字符串常量在常量池中只会有一份拷贝,而堆中的相同...

    Java堆,栈和常量池详解

    常量池是一块用于存放编译期生成的各种字面量和符号引用的内存区域,它存在于方法区中。Java语言规范规定,常量池是一个表结构,包含一系列的常量定义。每一个类或者接口都会在其方法区有一个常量池。 - **特点**:...

    深入浅析Java中的final关键字

    对于`final`修饰的基本类型和`String`类型的变量,如果它们的值在编译时就能确定,编译器会将其视为编译期常量。这意味着它们可以被“内联”,从而提高代码执行效率。例如,上述代码示例中,`final`变量`b`的值在...

    Java中的堆、栈和常量池_.docx

    字符串对象的引用存储在栈中,而实际的字符串内容可能存储在常量池(编译期已知的字符串)或堆中(运行期创建的字符串)。例如: ```java String s1 = "china"; // 字符串常量,存储在常量池 String s2 = "china"; ...

    浅谈Java中的final关键字与C#中的const, readonly关键字

    运行期常量 `readonly`关键字用于声明在运行时初始化但之后不再改变的值: ```csharp readonly int RunTimeValue; public MyClass() { this.RunTimeValue = 20; // 只能在这里或者字段声明时初始化 } ``` 与Java的...

    有关Java中关键字final的理解

     在Java编程语言中,有时候需要告知编译器一段数据是不变的编译期常量。对于这种情况,编译器可以将此常量值带入需要用到它的计算式子当中,这种在编译时执行计算式的方法减轻了运行时的开销。通常,这类常量数据...

    深入Java Final

    - **编译期常量**:当 `final` 与 `static` 一起使用时,创建的是编译期常量。这些常量在编译时就确定其值,并且在内存中分配固定的位置,可以提高代码的执行效率。例如: ```java public static final String ...

    Java编程规则

    此外,对于常量标识符,即那些被声明为static final的基本类型,所有字母都应大写,以便标识它们是编译期常量,如"MAX_VALUE"。而Java包(Package)全都是小写字母,即便是包含多个单词的包名,如"java.lang",也...

    JAVA JDK 5.0学习笔记

    编译期常量(Constant Expressions) 通过`final`关键字和`static`关键字结合,可以在编译时期就计算出常量的值,提高了程序效率。 ### 9. 基于接口的集合框架增强 JDK 5.0对集合框架进行了增强,包括`List`, `...

    Java中final关键字的深入探究

    在这个例子中,`s2`与`s`相等,因为`n2`在编译期就已经在常量池中,所以可以与字符串常量拼接时直接使用常量池中的值,而`s1`则需要在运行时计算。 此外,`final`还可以修饰方法,这意味着该方法不能被子类重写。这...

    java实现文件的压缩解压

    这里,`str1`和`str2`都指向了同一个字符串对象,因为它们的值相同,并且是在编译期确定的。 2. **改变字符串的值** ```java String str1 = "abc"; String str2 = "abc"; str1 = "bcd"; System.out.println...

    2024面向对象高级多态接口HM

    - **编译期优化**:编译器会在编译阶段对常量进行宏替换,提高运行效率。 **示例代码**: ```java public class Constant { public static final String SCHOOL_NAME = "传智教育"; } public class FinalDemo2 {...

    Java 基础(3-8) - 图谱 & Q-A.pdf

    Java的编译期常量(如`final static`字段)在编译时会被内联,但过度使用可能导致代码僵化。静态内部类与顶级类的主要区别在于生命周期和访问限制。`Serializable`和`Externalizable`分别代表序列化和自定义序列化...

    java基础知识,面试必备啊

    - 异常分为检查型异常(编译期需要处理)和运行时异常(可选处理)。 6. 垃圾回收机制: - 垃圾回收(Garbage Collection, GC)自动回收不再使用的对象所占用的内存,避免内存泄漏。 - GC通过标记、分代、复制、...

    Java代码编写一般性指导

    这种命名方式有助于识别出它们是编译期常量。 4. **Java包**:全小写,即使中间单词也不例外。例如:`com.example.mylibrary`。 #### 二、经典类结构 1. **equals()**:用于比较两个对象是否相等。 2. **hashCode()...

    java笔试题 面试题 很经典的

    需要注意的是,尽管这些类型都可以用于`case`标签,但它们必须是在编译期可知的常量表达式,例如字面量或`final`常量。 #### 七、特殊关键字与语句 **问题7:** Math,String是不可继承的。(final类) **答案解析:...

    java开发笔记

    - **修饰属性**: `final`修饰的属性可以在编译期或运行期初始化,一旦初始化后便不可更改。对于在运行期初始化的`final`属性,不同对象可以拥有不同的值。 - **修饰方法**: 被`final`修饰的方法不允许在子类中被...

Global site tag (gtag.js) - Google Analytics