详解java局部内部类

内部类不仅可以在类中进行定义,也可以在类的局部位置定义,如 在类的方法或任意的作用域中均可以定义内部类。

【例】修改java成员内部类中的例子,将InnerClass类放在doit()方法的内部。关 键代码如下:

interface OutInterface2 { // 定义一个接口
}
class OuterClass3 {
	public OutInterface2 doit(final String x) { // doit()方法参数为final类型
		// 在doit()方法中定义一个内部类
		class InnerClass2 implements OutInterface2 {
			InnerClass2(String s) {
				s = x;
				System.out.println(s);
			}
		}
		return new InnerClass2("doit");
	}
}

从上述代码中可以看出,内部类被定义在了doit()方法内部。但是 有一点值得注意,内部类InnerClass2是doit()方法的一部分,并非 OuterClass3类中的一部分,所以在doit()方法的外部不能访问该内部类,但是该内部类可以访问当前代码块的常量以及此外部类的所有成员。

有的读者会注意到例中的一个修改细节,就是将doit()方法的 参数设置为final类型。如果需要在方法体中使用局部变量,该局部变量 需要被设置为final类型,换句话说,在方法中定义的内部类只能访问方 法中final类型的局部变量,这是因为在方法中定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期,由于该局部变量被设 置为final,所以不能在内部类中改变该局部变量的值。

发表评论