java内部类的知识点
程序员文章站
2022-06-16 21:33:56
...
因为静态方法可以被类名.方法名()直接调用,可以说是“单例“的,内部类可以访问外部类成员变量,如果静态方法中new了同一个内部类的多个对象,就会出现 类名.方法名(多个对象操作同一个外部类变量或者方法的情况,出现“多个副本“,与“单例”规则不符,会出现方法逻辑问题)
e.g
public class Test {
private int value;
class InnerClass{
public InnerClass(){
System.out.println(value);
}
}
public Test(int value){
this.value = value;
}
public static void f(){
new InnerClass();
}
public static void main(String[] args){
Test t1 = new Test(10);
Test t2 = new Test(20);
Test.f();
//value到底是多少?
}
}
//内部类访问外部类成员变量&静态方法无法访问非静态成员变量
public class Test {
int value;
class Test_inner{
public Test_inner(int value){
//内部类访问外部类成员变量
// 因为不是匿名内部类所以没有用final不报错
// 匿名内部类则会报错
Test.this.value = value;
}
}
/*
* 此方法不报错
*/
void f(){
new Test_inner(10);
new Test_inner(20);
System.out.println(value);
//外部类访问内部类
Test.Test_inner test2 = new Test.Test_inner(10);
}
/**
* 此方法编译无法通过,且逻辑不通 value无法确定值
*/
static void f_static(){
new Test_inner(10);
new Test_inner(20);
System.out.println(value);
}
public static void main(String[] args) {
Test.f_static();
}
}
//匿名内部类方法访问外部类变量,外部变量必须使用final关键字
上一篇: web打印不显示页眉页脚