java内部类的知识点

因为静态方法可以被类名.方法名()直接调用,可以说是“单例“的,内部类可以访问外部类成员变量,如果静态方法中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关键字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值