Java 基础 -2 关于final

本文深入解析了Java中final关键字的作用及用法,包括其在变量、方法和类上的应用,并通过示例说明了final如何避免局部变量在内部类中的潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的值被修改 。引起混乱。


转载于:https://my.oschina.net/dou2016/blog/671302

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值