大部分时候,类被定义成一个独立的程序单元。在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类也被称为外部类。 对于上面的成员内部类,一般做法是在Outer中写一个返回Inner类对象的方法 ...
先看下面这段代码: 这段代码会被编译成两个class文件:Test.class和Test .class。默认情况下,编译器会为匿名内部类和局部内部类起名为Outterx.class x为正整数 。 根据上图可知,test方法中的匿名内部类的名字被起为 Test 。 上段代码中,如果把变量a和b前面的任一个final去掉,这段代码都编译不过。我们先考虑这样一个问题: 当test方法执行完毕之后,变 ...
2015-05-10 16:33 1 2265 推荐指数:
大部分时候,类被定义成一个独立的程序单元。在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类也被称为外部类。 对于上面的成员内部类,一般做法是在Outer中写一个返回Inner类对象的方法 ...
本文主要记录:在JAVA中,(局部)内部类访问某个局部变量,为什么这个局部变量一定需要用final 关键字修饰? 首先,什么是局部变量?这里的局部是:在方法里面定义的变量。 因此,内部类能够访问某局部变量,说明这个内部类不是在类中定义的内部类,而是在方法中定义的内部类,称之为:局部内部类 ...
1. 内部类里面使用外部类的局部变量时,其实就是内部类的对象在使用它,内部类对象生命周期中都可能调用它,而内部类试图访问外部方法中的局部变量时,外部方法的局部变量很可能已经不存在了,那么就得延续其生命,拷贝到内部类中,而拷贝会带来不一致性,从而需要使用final声明保证一致性。说白了,内部类会自动 ...
被匿名内部类引用的变量会被拷贝一份到内部类的环境中 但其后,在外部,该变量如果被修改,则内部外部不一致 Java为了避免数据不同步的问题,做出了匿名内部类只可以访问final的局部变量的限制。 究其原因,在于 区域变量 x 并不是真正被拿来于内部匿名类别中使用,而是在内部 ...
在学习多线程的时候用到了匿名内部类,匿名内部类可以访问static静态成员变量或者final修饰的局部变量。 匿名内部类在编译之后会生成class文件,比如Test内的第一个匿名内部类编译之后就是Test$1.class; 匿名内部类中访问的final修饰的局部变量在生成Test ...
/java-based-notebook-a-static-inner-class-within-a-class-member-within-the-class-of-local-inner-classes-anonymous-inner-classes.html内部类:使用内部类减少了命名冲突。一个内部类可以定义在一个类中,一个方法中甚至一个 ...
创建内部类的典型的方式是在一个方法体的里面创建,局部内部类不能有访问说明符,因为它不是外围类的一部分,但是它可以访问当前代码块内的常量,以及此外围类的所有成员。下面的例子对局部内部类与匿名内部类的创建进行了比较。 具体代码实现: package thinking.in.java ...
分析 1、内部类(不论是否是匿名内部类)可访问外部类的变量(包括外部类的类变量、实例变量、外部类方法的局部变量等)、方法:可修改变量值、调用方法等。内部类定义时的位置有两种: 在外部类的方法内:此时该内部类只能是匿名内部类(语法上不支持在方法内定义非匿名类)。此时内部类可访问上述所有变量 ...