`

JVM对final变量赋值的限制

 
阅读更多

       对于final变量的赋值,JVM对其是有限制的。为了保证安全性只允许其被赋值一次。

例如下面的程序就是不合法的:


虽然程序本身可能没有什么错误,但是Java的编译器认为这样是不安全的。解决办法有很多,下面给个不错的解决办法:


如上所示,不仅解决了问题(final只被赋值了一次),还增加了程序的可读性。
 
 ***********************************************************************************************************************************

 

如下代码就是合法的:



 if...else语句和try...catch语句不同。if语句中的执行之后,else中的是不可能执行的。所以,以上代码是安全的。但是try...catch语句就不同了。try中的语句执行之后,抛出异常又会执行catch语句中的。所以try...catch对final变量赋值是通不过Java编译器的。

  • 大小: 12.8 KB
分享到:
评论

相关推荐

    初级Java程序员面试题

    final修饰的成员变量,必须在声明的同时赋值,一旦创建不可修改; final修饰的方法,不能被子类重写; final类中的方法默认是final的; private类型的方法默认是final的; java 中的 Math.round(-1.5) 等于多少...

    【05-面向对象(下)】

    •对一个final变量来说,不管它是类变量、实例变量,还是局部变量,只要该变量满足3个条件,这个final变量就 不再是一个变量,而是相当于一个直接量。  –使用final修饰符修饰;  –在定义该final变量时指定...

    Java最全面试题200道

    1、JDK 和 JRE 有什么区别? JDK(Java Development Kit),Java开发...3.如果引用是类的成员变量,则必须当场赋值,否则编译会报错。 (2)用来修饰一个方法 当使用final修饰方法时,这个方法将成为最终方法,无法被

    突破程序员基本功的16课.part2

    5.1.1 JVM对字符串的处理 5.1.2 不可变的字符串 5.1.3 字符串比较 5.2 表达式类型的陷阱 5.2.1 表达式类型的自动提升 5.2.2 复合赋值运算符的陷阱 5.3 输入法导致的陷阱 5.4 注释的字符必须合法 5.5 转义...

    java7hashmap源码-Interview:面试宝典

    修辞类变量,变量必须初始化 字符串池String Pool 字符串创建方式 String str = "interview"; //采用字面值的方式创建:JVM首先会去字符串池中查找是否存在"interview"这个对象。如果不存在,则在字符串池中创建这个...

    浅谈Java中的StringBuilder

     在《浅谈Java String内幕(1)》 中,字符串变量(非final修饰)通过 “+” 进行拼接,在编译过程中会转化为StringBuilder对象的append操作,注意是编译过程,而不是在JVM中。  public class StringTest {  ...

    疯狂JAVA讲义

    6.4.1 final变量 177 6.4.2 final方法 181 6.4.3 final类 182 6.4.4 不可变类 182 6.4.5 缓存实例的不可变类 186 6.5 抽象类 188 6.5.1 抽象方法和抽象类 188 6.5.2 抽象类的作用 191 6.6 更彻底的抽象:...

    net学习笔记及其他代码应用

    接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象...

    千方百计笔试题大全

    108、以下哪一个不是赋值符号? 25 109、以下哪个不是Collection的子接口? 25 110、.BufferedReader的父类是以下哪个? 25 112、div与span区别? 25 113、html的框架是什么? 25 114、alert怎样换行? 25 115、什么...

    java面试宝典

    108、以下哪一个不是赋值符号? 25 109、以下哪个不是Collection的子接口? 25 110、.BufferedReader的父类是以下哪个? 25 112、div与span区别? 25 113、html的框架是什么? 25 114、alert怎样换行? 25 115、什么...

    java编程基础,应用与实例

    1.2.3 Java Virtual Machine(JVM) 2 1.2.4 面向对象的程序设计语言 2 1.2.5 线程(thread) 2 1.2.6 垃圾回收机制(garbage collection) 2 1.3 安装Java程序开发工具(JDK1.5) 2 1.3.1 安装JAVA 2 Standard ...

    AIC的Java课程1-6章

    第2章 面向过程(变量和控制结构) 4课时  掌握变量的内存概念,8种基本类型,字面值和赋值。  正确使用各种Java运算符,如一元运算符,算术运算符,关系运算符,逻辑运算符,条件运算符和赋值...

    二十三种设计模式【PDF版】

    你的设计应该对手头的问题有针对性,同时对将来的问题和需求 也要有足够的通用性。 你也希望避免重复设计或尽可能少做重复设计。有经验的面向对象设计者会告诉你,要一下子就得到复用性和灵活性好的设计, 即使不是...

Global site tag (gtag.js) - Google Analytics