Java 基础 -2 关于final
Java 基础 -2 关于final
wow863597 发表于2年前
Java 基础 -2 关于final
  • 发表于 2年前
  • 阅读 6
  • 收藏 1
  • 点赞 2
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: Java final 内部类

final : 修饰 变量 变量被赋初值之后不能改变 ;  修饰 方法方法不能重写 ,修饰类 不能派生子类 

final 修饰的变量实现了宏替换 , 即在编译期间就把变量替换为值 的形式。 主要的好处是在编程过程中防止向前引用实例变量 的时候实例变量虽然初始化但是还未被赋值 。

如果程序需要在局部内部类(匿名内部类)中使用局部变量那么这个局部变量必须要使用final修饰。关于这一句话原因 特别查了一下 书 《疯狂JAVA-突破程序员基本功的16课 》。解释如下: 

对于普通局部变量而言,作用范围在方法内,随着方法结束而消亡,假如在内部类中使用该局部变量,有可能造成隐式“闭包”,即局部变量脱离他所在方法继续存在。

public class ThreadDemo{
public static void main (String [] args ){
//局部變量 str 
 final String str ="hello ,MR.";
 new Thread (new Runnable(){
 public void run (){
 for(int i=0;i<100;i++){
 //使用局部变量
 System.out.println(str+i);
 try{
 Thread.sleep(1000);
 }catch(Exception e ){
 e.printStackTrace();
 }
 //若不适用fianl可能出现混乱的语句 
 // str ="JAVA";
 }
 }).start(); //标记①
 }
 }

程序运行到标记①的位置 的时候 main方法结束 ,局部变量str 到此消亡 但是 线程 并未结束 ,str出现隐式“闭包”。若不适用final 修饰 ,则有可能出现  mian方法结束 之后 str的值被修改 。引起混乱。


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 3
博文 37
码字总数 23132
×
wow863597
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: