一。final对象

使用final关键字修饰一个变量时,是指引用不能变,引用的对象中的内容还是可以改变的。例如,对于如下语句:

 final StringBuffer a=new StringBuffer("immutable");

 // a=new StringBuffer(""); //编译出错 

 a.append(" broken!");  // 可以 

传入final参数不能阻止方法内部修改传进来的参数对象:

public void method(final  StringBuffer  param){

  param.append("a");

}

3.数组也是对象

final int[] count=new int[1];  //count[0] = 9; count[0] = 100 都可以 

综上:栈上的内容不能修改,但堆上的内容可以修改。

数组元素是存在堆中的,但是直接给一个变量赋值, 是在栈中直接对变量赋值,数组是从栈中向堆中引用。我画不了图,╮(╯▽╰)╭ ,

简单的说,数组是两部分组成的,栈中定义的是变量和引用,然后数组又有0、1、2、……,对应着数组中的元素,所以final定义的数组,

数组里面的值就能改,而final定义的直接给一个变量赋值就不能改。

二。final 基本类型

public class Something {
public int addOne(final int x) {
return ++x; //出错 。 x 被修饰成final
}
}

三。内部类使用的外部变量

应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方法,变量就失去了作用,而内部类却不会离开它所在方法就失去作用,它有更广的生命周期。

final 变量的更多相关文章

  1. 为什么匿名内部类只能访问final变量【转】

    是变量的作用域的问题,因为匿名内部类是出现在一个方法的内部的,如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为final.因为虽然匿名内部类在方法的内部,但实际编译的时候, ...

  2. 多线程之 Final变量 详解

    原文: http://www.tuicool.com/articles/2Yjmqy 并发编程网:http://ifeve.com/java-memory-model/ 总结: Final 变量在并发 ...

  3. Java基础-内部类-为什么局部和匿名内部类只能访问局部final变量

    先看下面这段代码: public class Test { public static void main(String[] args) { } public void test(final int ...

  4. Java基础-final变量和普通变量的区别

    当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再 ...

  5. Java中final变量的初始化方式

    原文转自:http://blog.csdn.net/zhangjk1993/article/details/24196847 public class FinalTest1 { //--------- ...

  6. 【JAVA】在编译期可直接替换的final变量

    一.满足以下三个条件,一个final变量就不再是一个变量,而是一个直接量. 使用final修饰符修饰. 在申明的时候就进行初始化 初始化的值在编译器就可以确定. 二.在什么情况下初始化的值在编译期是可 ...

  7. java的final变量理解

    java的final变量理解 final基本类型是数值不能改变 final对象是引用不能改变,对象其自身是可以被修改的.

  8. static变量和final变量

    1.static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的区别是: 对于静态变量在内 ...

  9. 再说java final变量

    http://blog.csdn.net/axman/article/details/1460544 从jdk1.0到今天,JAVA技术经过十余年的发展,技术上已经发生了巨大的变化.但final变量的 ...

  10. java中final变量的用法

    4.4 final变量    final变量的数值不能在初始化之后进行改变(你希望a=3,有很多用到a的场合, 你当然不能在程序中就用3来代替a). 比如: final int h = 0; 想像有一 ...

随机推荐

  1. word转pdf

    很多人在工作经常会遇到word转pdf功能,word转pdf还是比较复杂,网上各种包,如python的各种转换包,其实是存在很多问题 的,尤其是对比较复杂的格式,真正的还的是调用组件来转换,这里介绍的 ...

  2. opencv的C语言接口和C++接口差别(入门篇)

    opencv是一个开源的图像处理库,最经典的1.0版本号提供的接口都是C语言接口. 后来的opencv2.x版本号保留了C语言接口,可是提供了C++接口,当中的C语言接口仅仅是为了向后兼容,而C++接 ...

  3. 自己学Docker:4.開始了解Docker的工作模式

    上一章在学习中有2个疑问: 怎样保存我们在容器里的改动? 假设apt-get假设不能安装时,怎样在Docker中安装软件? 关于run创建的容器问题 对于第一个问题.原来每次运行(当非root用户时, ...

  4. jQuery Ajax 学习(转)

    Ajax全称:Asynchronous JavaScript and XML(异步的JavaScript和XML)特点:在不必刷新整个网页的情况下实现局部更新,带来更好的用户体验.因为XMLHttpR ...

  5. 如何將 MySQL 資料庫轉移到 Microsoft SQL Server 與 Azure SQL Database

    MySQL 是相當常用之資料庫伺服器,而微軟雲端服務 Microsoft Azure 上 Azure SQL Database 是一個功能強大且經濟實惠的選擇,透過本篇文章,使用 SQL Server ...

  6. mysql官网下载页面

    http://dev.mysql.com/downloads/mysql/5.6.html#downloads

  7. wb标准

    1. WEB标准 WEB标准不是某一个标准,而是一系列标准的集合.网页主要由三部分组成:结构(Structure).表现(Presentation)和行为(Behavior).对应的标准也分三方面:结 ...

  8. 【转】Monkey测试5-运行中停止monkey

    停止monkey自动测试步骤: 1.ps命令  查找uiautomator的进程 打开cmd命令行窗口 输入: adb shell ; ps | grep monkey; 返回来的第一个数字,即是mo ...

  9. important——》sql server 2000安装图解

    MS Sql Server 2000包含两个部分:服务器组件和客户端工具,其中服务器组建是以Windows服务的方式运行的,有四种服务分别是:MSSqlServer.Distributed Trans ...

  10. Java Web -- Servlet(1) 必备知识

    学习Java WEB开发必备的基本概念: 1.WEB 本意是蜘蛛网和网的意思.在网页设计中我们称为网页的意思. 现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本(hypertext).超媒体 ...