文档章节

Java 基础 -2 关于final

wow863597
 wow863597
发布于 2016/05/07 18:27
字数 397
阅读 6
收藏 1

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


© 著作权归作者所有

共有 人打赏支持
wow863597
粉丝 3
博文 38
码字总数 23132
作品 0
济南
程序员
为什么interface的变量必须是public final static的

public 感觉是因为Java对接口的要求是所有类都可以实现接口,不能对接口进行包什么的限制,所以只能是public了 static 因为接口不能实例化,所以只能是静态的 final 为什么接口成员应该是常量...

swearyd457
2013/10/10
0
0
03《Java核心技术36讲》之谈谈final、finally、 finalize有什么不同?

一、提出问题 Java 语言有很多看起来很相似,但是用途却完全不同的语言要素,这些内容往往容易成为面试官考察你知识掌握程度的切入点。 今天,我要问你的是一个经典的 Java 基础题目,谈谈 ...

飞鱼说编程
09/14
0
0
java程序员基础进阶篇,万丈高楼平地起

一.final,finally,finalize 三者区别 Final是一个修饰符: 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这...

启示录是真的
05/26
0
0
【Java并发专题】27篇文章详细总结Java并发基础知识

努力的意义,就是,在以后的日子里,放眼望去全是自己喜欢的人和事! github:https://github.com/CL0610/Java-concurrency,欢迎题issue和Pull request。所有的文档都是自己亲自码的,如果觉...

你听___
05/06
0
0
JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52724939 JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千! 经过了几...

Aduroidpc
2016/10/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

中国发布域名系统基础软件 “红枫”

9月12日消息,域名工程中心(英文缩写 ZDNS)发布了宣称自主开发的域名系统基础软件 “红枫(Maple DNS)”。 9月12日消息,域名工程中心(英文缩写 ZDNS)发布了宣称自主开发的域名系统基础软...

问题终结者
28分钟前
1
0
Shell编程(分发系统介绍、expect远程登录、expect远程执行命令、expect传递参数)

分发系统介绍expect 分发系统expect即分发脚本,是一种脚本语言;通过他可以实现传输,输入命令(上线代码) 应用场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者...

蛋黄_Yolks
33分钟前
1
0
Java Http请求工具类

public static String httpPost(String source, String params) {URL url = null;HttpURLConnection conn = null;OutputStream os = null;String ret = null;try {......

yuewawa
40分钟前
1
0
C++11 智能指针

C++11提供了三个智能指针,std::shared_ptr,std::unique_ptr,std::weak_ptr。最常用的是shared_ptr和unique_ptr。 (1)std::shared_ptr shared_ptr是共享指针,通过在控制块中增加引用计数...

yepanl
41分钟前
1
0
React 服务器渲染原理解析与实践

网盘下载地址 React 服务器渲染原理解析与实践 本套课程,讲解了React中SSR技术的整个搭建思路及流程,完整的从原理上讲清楚了SSR的概念,重点在于讲解编写SSR框架遇到的各种知识点,以及细节...

qq__2304636824
52分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部