所以final从语法上约束了实际上两个不同变量的一致性(表现为同一变量).

我的理解:

例如这样的代码:

public void test(String str){
str="abc";
}

其实执行完毕了,执行的只是原来str的一个镜像文件,根本不会影响原来的变量。

内部类是属于外部类的一个组件

class Outer{

  private String str;

     class Inner{
public void test(){
System.out.println(str);
}
} public static void main(String[] args){
Outer.Inner in=new Outer().new Inner();
this.str="ad";
thsi.str="bc";
}
}

我想,如果外部类的变量不是final的,那么在第一次生成内部类对象之后,内部类的方法执行结果都会随着外部类该变量的改变而改变。但是该变量应该是属于内部类的一个组件,也就是说你随意操作外部类对象就可以改变它生成的内部类对象,这显然是错误的。所以我们将使用的外部类对象定义为final,保证了外部类和内部类的表现的一致性。

不是很懂。原文链接:

http://blog.csdn.net/axman/article/details/1460544                            

Java中内部类中使用外面变量为什么final修饰?的更多相关文章

  1. 匿名内部类可以访问的变量---静态成员变量和final修饰的局部变量

    在学习多线程的时候用到了匿名内部类,匿名内部类可以访问static静态成员变量或者final修饰的局部变量. 匿名内部类在编译之后会生成class文件,比如Test内的第一个匿名内部类编译之后就是Te ...

  2. java中内部类中还有内部类请给实例!

    2.当内部类中还有一个内部类,下面给出了一个实例.[新手可忽略不影响继续学习](以下多出代码, 用蓝色标记)例2.2:class ShellMark_to_win {    int shell_x = ...

  3. Java学习笔记(4)--- 变量类型,修饰符

    1.变量类型: a.定义: 和C++差不多,就是: type identifier [ = value][, identifier [= value] ...]: type为Java数据类型.iden ...

  4. Java反射-修改字段值, 反射修改static final修饰的字段

    反射修改字段 咱们从最简单的例子到难, 一步一步深入. 使用反射修改一个private修饰符的变量name 咱们回到主题, 先用反射来实现一个最基础的功能吧. 其中待获取的name如下: public ...

  5. Java基础内部类、包的声名、访问修饰符、代码块整理

    内部类 14.1内部类概念 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类与局部内部类. 我们定义内部类时,就 ...

  6. JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?

    本文主要记录:在JAVA中,(局部)内部类访问某个局部变量,为什么这个局部变量一定需要用final 关键字修饰? 首先,什么是局部变量?这里的局部是:在方法里面定义的变量. 因此,内部类能够访问某局部 ...

  7. Java中final修饰符深入研究

    一.开篇 本博客来自:http://www.cnblogs.com/yuananyun/ final修饰符是Java中比较简单常用的修饰符,同时也是一个被"误解"较多的修饰符.对很 ...

  8. Java中final修饰的数据

    目录 Java中final修饰的数据 有初始值的final域 final+基本数据类型 final+引用数据类型 final与static final 空白final域 final修饰的参数 基本数据 ...

  9. Java中的final修饰符

    1.什么时候可以选择final修饰符 如果想让一个类不被其他类继承,不允许在有子类,这时候就要考虑用到final来修饰. 2.用final修饰的类 首先大家要明白,用final修饰的类是不能被继承的, ...

随机推荐

  1. VirtualBox 笔记

    VirtualBox 笔记p=111" target="_blank"> http://www.youi5.com/?p=111 VirtualBox 虚拟机,由I ...

  2. 【Python】字典~深入篇

    字典的定义 字典是一系列键值对,字典用放在{}一系列键值对表示 info = {','city':'KunMing'} 字典增.删.改.查 增加新元素 指定字典名,用方括号括起来的键和相关的值 inf ...

  3. WCF TCP通信方式 通过IIS承载调试

    http://www.cnblogs.com/nikymaco/archive/2012/10/08/2715954.html IIS Express服务器只支持http/https,不支持net.t ...

  4. Shell脚本笔记 1

    函数别名 设置别名 alias name="command" alias ll="ls -laS" 取消别名 unalias name 求取数学表达式 valu ...

  5. Spring Security实现短信验证码登录

    Spring Security默认的一个实现是使用用户名密码登录,当初我们在开始做项目时,也是先使用这种登录方式,并没有多考虑其他的登录方式.而后面需求越来越多,我们需要支持短信验证码登录了,这时候再 ...

  6. 解决Oracle用户被锁定的方法

    解决Oracle用户被锁定的方法 1,cmd控制台: 使用sqlplus 命令:sqlplus sys/密码@ip/orcl as sysdba; 2,先设置具体时间格式,以便查看具体时间 SQL&g ...

  7. Android studio 混淆打包问题

    参考 : Android Studio代码混淆设置以及上传mapping文件 AndroidStudio 混淆打包 在app 目录下  proguard-rules.pro中加入 通用 混淆 #指定代 ...

  8. Java学习之路 第四篇 oop和class (面向对象和类)

    本人水平有限,创作本文是为了记录学习和帮助初学者学习,欢迎指正和补充 一.面向对象编程的设计概述 很多同学都在学校学了电脑的编程,现在的书籍大部分都是oop面向对象编程,一个很抽象的的名字,比较难以理 ...

  9. A20地址线问题

    [0]README text description from Zhaojiong's perfect analysis of Linux kernel . [1]A20地址线问题(干货来了) 198 ...

  10. SCRM从入门到精通01

    [SCRM从入门到精通01]如何基于微信开放接口开发企业的微信CRM? 业内一直都在传说微信是天生的CRM,可是没有人看到过微信CRM的真容.随着微信最新公众平台的改版和开放接口的微信认证开放,微信C ...