文档章节

Java 基础 -2 关于final

wow863597
 wow863597
发布于 2016/05/07 18:27
字数 397
阅读 6
收藏 1
点赞 2
评论 0

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
济南
程序员
【Java并发专题】27篇文章详细总结Java并发基础知识

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

你听___
05/06
0
0
java程序员基础进阶篇,万丈高楼平地起

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

启示录是真的
05/26
0
0
为什么interface的变量必须是public final static的

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

swearyd457
2013/10/10
0
0
Scala学习笔记(2)-基础语法

秉着简洁而不失完整的的原则,这章只把Scala主要语法和与Java不同的内容列出来,以后章节也如此,内容以简洁为主,太长了自己都被吓着了,也没耐心看下去。 1.Scala解释器使用,这里不做介绍...

山海经
2013/08/25
0
0
asm学习2-java类在asm里的基本描述

上节里有关于asm的一些基本概念,比如:visit里的第一个类版本,方法的描述、引用描述等,下面将一一介绍。 类版本 一个Java二进制的类文件,都有一个版本,对应于不同的jdk版本。因此ASM中提...

messud4312
2015/02/06
0
0
From Java to Dart

前言 帮助你快速入门 Dart Print to Console Java System.out.print("Hello, World"); System.out.println("Hello, World"); Dart print('Hello, World!'); Constants and Variables Java S......

Pape
07/05
0
0
java 获取系统信息(从lucene源码找的)

/ The value of <tt>System.getProperty("java.version")<tt>. / public static final String JAVA_VERSION = System.getProperty("java.version"); /** True iff this is Java version 1.1.......

jiangtao
2012/01/30
0
0
java内存分配和String类型的深度解析

一、引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题。下面是...

萧十一郎君
2013/10/19
0
30
深入理解Java中的final关键字

Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用...

longbadx
2014/01/07
0
2
Java学习---Java简单认识

前言 小编在学习Java方面的基础知识,发现里面有很多是结合之前的语言的特点发展过来的,不同的地方是,Java有它自己的发展和特点。下面小编先简单地做一下总结,结合看过的1-2章的J2SE视频,...

m18633778874
04/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

07、Vue.js---Vue对象的实例方法和属性

Vue对象的实例属性和方法分为全局和局部实例属性和方法。全局和局部的区别在于调用者不同。 · 局部实例属性和方法: vm | this .$方法名或属性; · 全局实例熟悉和方法: Vue .方法名或属性...

秋季长青
6分钟前
0
0
乐观锁

最近公司一个项目中会遇到一个用户记录被多次插入的情况。其实在保存之前先判断有没有的。 觉得可以采用乐观锁机制来解决问题。 JPA之@Version进行乐观锁并发更新 使用JPA实现乐观锁 spring...

miaojiangmin
10分钟前
1
0
并发插入引发的死锁问题排查

一.业务背景 我们现在的业务是一款数据产品,有不少实时计算和爬取来的数据都汇总到大数据仓库、数据挖掘平台ODPS上。然后应用在读取这些数据时,这些数据会先导入到并发读能力更强,适合结构...

tantexian
20分钟前
0
0
docker 搭建nginx+php5.6+mysql

因为要重新做服务器系统,正好把公司官网,放到容器中,生成个镜像,以后就不用管它了。我看看公司官网使用php写的,并且使用thinkPHP3.1的框架,看到这里崩溃了。没办法,服务器得做系统,硬...

始终初心
22分钟前
0
0
应用实战:从Redis到Aerospike,我们踩了这些坑

个推专注为开发者们提供消息推送服务多年。通过个推SDK,手机终端与服务器建立长连接,维持在线状态。然而在网络异常等情况下,消息无法实时送达到终端用户,因而推送服务器建立了一份离线消...

个推
26分钟前
0
0
0718日志

c端线上地址 http://x.diandanme.com/fe/?d=183#/ 什么时候来需求,我做好准备了吗? router取值问题 --host 192.168.33.121 git下拉覆盖本地文件 $ git fetch --all $ git reset origin/mas...

大美琴
26分钟前
0
0
Swift 学习网址推荐

1."航哥" http://www.hangge.com/blog/cache/category_72_1.html 2.https://nintendoboy.gitbooks.io/swift-study-note-v2/content/swift.html...

west_zll
27分钟前
1
0
istio 0.8 服务限流配置

此任务说明如何使用Istio动态限制服务的流量。 在你开始之前 按照安装指南中的快速入门说明在Kubernetes群集中设置Istio 。 部署Bookinfo示例应用程序。 初始化应用程序版本路由以将reviews...

xiaomin0322
28分钟前
0
0
SpringCloud架构设计

最近一直在针对SpringCloud框架做项目,从中踩了不少的坑,也渐渐梳理出了一些内容,由于SpringCloud作为一个全家桶,其中东西太多,所以这时候就要有所取舍,这里就想把自己比较常用组件及架...

xiaoxin
28分钟前
2
0
XamarinSQLite教程创建数据库

XamarinSQLite教程创建数据库 安装SQLite/SQL Server Compact Toolbox后,就可以使用该插件创建数据库了。操作步骤如下: (1)在Visual Studio中,单击“工具”|SQLite/SQL Server Compact ...

大学霸
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部