首先,内部类被编译的时候会生成一个单独的内部类的.class文件,这个文件并不与外部类在同一class文件中。
当外部类传的参数被内部类调用时,从java程序的角度来看是直接的调用例如:
public void dosome(final String a,final int b){
class Dosome{public void dosome(){System.out.println(a+b)}};
Dosome some=new Dosome();
some.dosome();
}
从代码来看好像是那个内部类直接调用的a参数和b参数,但是实际上不是,在java编译器编译以后实际的操作代码是
class Outer$Dosome{
public Dosome(final String a,final int b){
this.Dosome$a=a;
this.Dosome$b=b;
}
public void dosome(){
System.out.println(this.Dosome$a+this.Dosome$b);
}
}}
从以上代码看来,内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。
这样理解就很容易得出为什么要用final了,因为两者从外表看起来是同一个东西,实际上却不是这样,如果内部类改掉了这些参数的值也不可能影 响到原参数,然而这样却失去了参数的一致性,因为从编程人员的角度来看他们是同一个东西,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部 调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是 final来规避这种莫名其妙错误的存在。”
(简单理解就是,拷贝引用,为了避免引用值发生改变,例如被外部类的方法修改等,而导致内部类得到的值不一致,于是用final来让该引用不可改变)
相关推荐
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法。 主要介绍:一.final关键字的基本...
主要介绍了Java面向对象编程中final关键字的使用方法详解,包括对内部匿名类无法访问外面的非 final 的变量问题的解读,需要的朋友可以参考下
static 关键字 final 关键字 抽象类(abstract 关键字) 接口(interface 关键字) 内部类
首先,final 关键字用于修饰不可改变的内容,可以修饰类、方法和变量。被 final 修饰的类不能被继承,方法不能被重写,变量不能被重新赋值。例如,String、Math 和 Scanner 等类都是被 final 修饰的,目的是供我们...
Java 视频教程目录: day01、Java 语言发展史_JDK的安装_HelloWorld程序的编写_关键字_标识符_基本数据类型。 day02、Java 数据类型转换_...day11:Java final 关键字_内部类_成员内部类_局部内部类_匿名内部类。
第一章 final关键字1.1 概述学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承API中提供的类,改写其
作者:guanpj ...在开发过程中,由于习惯的原因...在 Java 8 之前,匿名内部类在使用外部成员的时候,会报错并提示 “Cannot refer to a non-final variable arg inside an inner class defined in a different method”:
第一章 final关键字1.1 概述学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承API中提供的类,改写其
1.static 关键字 2.final 关键字 3.抽象类(abstract 关键字) 4.接口(interface 关键字) 5.内部类
即时从源代码中删除最终关键字,并允许模拟最终方法和类。 它可以与任何测试工具(如PHPUnit,Mockery或。 安装 推荐的安装方式是通过Composer: composer require dg/bypass-finals --dev 它需要PHP版本7.1(在...
final关键字 6 抽象类 8 抽象类--模板设计模式 9 接口 9 内部类 11 匿名内部类的使用(重要!!!!!!!) 13 成员内部类的使用 13 静态内部类的使用 14 枚举的二种实现方式 14 自定义类实现枚举 14 使用 enum 关键字实现...
final关键字特性 Java类和包 抽象类和接口 代码块和代码执行顺序 Java自动拆箱装箱里隐藏的秘密 Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入...
5. final关键字的使用:包括final关键字的应用和final关键字在继承中的作用。 类的继承是面向对象编程的核心机制之一,它允许一个类继承另一个类的所有属性和方法,从而实现代码的重用和简化编程。Java中只支持单...
* final 关键字的使用:在 Java 中,final 关键字用于修饰变量、方法和类。这里,我们需要将 clusters 声明为 final 类型,因为在内部类中只能使用 final 关键字修饰的外部变量。 * SparkBench 的搭建:SparkBench ...
类和对象关键字 * abstract:用在类的声明中,指明一个类是不能被实例化的,但是可以被其它类继承。 * class:用来定义一个类,它包含有关对象的信息,包括名称、方法、属性和事件。 * extends:用来继承一个类,...
本篇文章主要分项了一下关于php类中的$this,static,final,const,self这几个关键字使用方法。 $this $this表示当前实例,在类的内部方法访问未声明为const及static的属性时,使用$this->value=’phpernote’...
1、关键字 :final 用来定义类和方法的一个重要关键字,当定义类的时候该类将不能被继承,当用来定义方法的时候该方法将不能被重载2、关键字 : self 用来用类访问当前类中的内容的关键字,类似与$this关键字,但$...
许多开发人员认为,只要使用final关键字或val关键字就可以使对象不可变,但是这是一种误解。不可变数据结构具有许多优势,例如没有无效的状态、线程安全、易于理解的代码、更容易测试代码、可用于值类型等。 首先,...
用来定义类和方法的一个重要关键字,当定义类的时候该类将不能被继承, 当用来定义方法的时候该方法将不能被重载 2、关键字 : self 用来用类访问当前类中的内容的关键字,类似与$this关键字,但$this是需要 ...
final 关键字是 Java 中的修饰符,用于修饰类、接口、抽象类、方法和属性。final 关键字可以防止类被继承、方法被重写、变量被修改等。 十二、线程 线程是 Java 中的并发编程机制,用于实现多任务处理。线程可以...