java局部内部类

1、语法

//定义外部类
Class Outer{
//1.外部类成员

//2.成员方法
[访问修饰符] 数据类型 方法名([参数列表]){
    //3.局部内部类
    class 内部类名{
        //4.内部类成员
    }

    //5.创建局部内部类对象:局部内部类名 对象 = new 局部内部类名();
    //6.调用属性或者方法
 }
}

说明

1)在方法中定义的内部类称为局部内部类;

2)与局部变量类似,在局部内部类前不允许加访问修饰符;外部类可以使用public 或 (default)修饰;成员内部类:可以使用public、protected、(default)、private;

3)局部内部类不仅可以访问外部类实例变量,还可以访问外部类的局部变量,但外部类的局部变量必须声明为final,JDK1.8+可以省略。原因:

  • new出来的对象存放在堆内存中;

  • 局部变量跟着方法走,存储在栈内存中;

  • 方法运行结束后,立即出栈,局部变量随之消失;

  • 而局部类new出来的对象在堆内存中持续存在,走到垃圾回收消失

4)在类外不可直接生成局部内部类(保证局部内部类对外是不可见的)。要想使用局部内部类时需要生成对象,对象调用方法,在方法中才能调用其局部内部类。

2、例子

public class Outer {
	//外部类成员变量
	int count = 100 ;
	
	public void test() {
		//注意:JDK1.8中,会自动进行检测,当局部内部类访问局部变量时,会隐式在该局部变量加final关键字,声明为常量
		int local1 = 200 ;
		final int local2 = 300 ;
		//local = 300 ;	//在此,再次给local变量赋值,会报错,常量不允许重新赋值
		//局部内部类
		class Inner {
			void display() {
				//访问外部类的成员变量
				System.out.println(count);
				//访问方法的final局部变量,JDK1.8会自动声明为final
				System.out.println(local1);
				System.out.println(local2);
			}
		}
		//实例化局部内部类对象,并调用方法
		Inner inner = new Inner() ;
		inner.display();
	}
}


public class MainTest {
	public static void main(String[] args) {
		Outer outer = new Outer() ;
		outer.test();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值