inner class 用法
来源:互联网 发布:qq旋风破解版 mac 编辑:程序博客网 时间:2024/06/08 16:24
问题提出:inner class中使用的参数为什么必须为final啊?
interface A {
void f();
}
class B {
public A m(final int a) {
return new A() {
int b = a;
void f() {};
}
}
}
请问 final int a, 为什么必须是final
------解决方案--------------------
内部类使用注意事项:
这里不考虑静态内部类,因为没有什么特别的限制
1.内部类不允许静态修饰(包括静态域,方法,静态初始化)
2.内部类可以直接访问外围类的方法。
3.内部类可以直接访问外围类的成员变量,语法为:OuterClass.this.FIELDNAME。
4.如果要访问方法的参数,必须为final,主要针对匿名类和临时内部类而已,因为他们定义
在方法体内。这里把方法体的临时变量作为一个延生,也是必须为fianl的。这样做是为了规范内部类的行为.
这是出于变量作用域的限制考虑. 内部类能使用的变量局限于内部类里面声明的变量, 一般情况下不能使用外面的. 但如果外部变量被声明为final的, 就相当于是一个全局变量, 它的生命周期就扩展到内部类里面了, 因此可以访问.
interface A {
void f();
}
class B {
public A m(final int a) {
return new A() {
int b = a;
void f() {};
}
}
}
请问 final int a, 为什么必须是final
------解决方案--------------------
内部类使用注意事项:
这里不考虑静态内部类,因为没有什么特别的限制
1.内部类不允许静态修饰(包括静态域,方法,静态初始化)
2.内部类可以直接访问外围类的方法。
3.内部类可以直接访问外围类的成员变量,语法为:OuterClass.this.FIELDNAME。
4.如果要访问方法的参数,必须为final,主要针对匿名类和临时内部类而已,因为他们定义
在方法体内。这里把方法体的临时变量作为一个延生,也是必须为fianl的。这样做是为了规范内部类的行为.
这是出于变量作用域的限制考虑. 内部类能使用的变量局限于内部类里面声明的变量, 一般情况下不能使用外面的. 但如果外部变量被声明为final的, 就相当于是一个全局变量, 它的生命周期就扩展到内部类里面了, 因此可以访问.
加final修饰符是为了防止该变量指向其他引用,比如你将这个变量指向null而外部类却毫不知情的继续在使用这个null的变量
自己也可以尝试一下:
class Gizmo{
public void sppin(){}
}
public class FinalArguments{
void with(final Gizmo g){
//不能 g=new Gizmo();
}
void without(Gizmo g){
g=new Gizmo();//这里就是可以的哦。
}
}
0 0
- inner class 用法
- Inner Class
- inner class
- Inner class
- inner class
- inner class
- inner class
- Inner class
- inner class
- Java inner class and anonymous inner class
- static class(inner class中 )
- inner class, static nested class
- java inner class
- 3类inner class
- java inner class
- 产生inner class对象
- static inner class
- non-static inner class
- Android之6.0上的重要变化(二)
- 周赛题 (华中农业大学第四届程序设计大赛网络同步赛)
- html中如何将文本域<textarea>内容变为只读
- gets 和 scanf 和 getchar
- python环境下SVD++推荐系统wooflix的安装
- inner class 用法
- exp\imp 导入导出命令使用
- 【机房收费系统】泛型是个什么鬼?
- 未能加载类型“Maticsoft.Web.Global”。
- Apache Commons包含了很多开源的工具类介绍
- 2016"百度之星" - 资格赛 Problem A
- 神经网络中前向传播和反向传播解析
- MPI_COMM_SPLIT函数浅尝
- AsyncTask异步交互