局部内部类(方法内部类)

局部内部类

如果一个类是定义在一个方法内部,那么他就是一个局部内部类。
//“局部”:只是当前所属的方法才能使用它,除了这个方法就不行了。
/*定义格式:

  • 修饰符 class 外部类名称{//
  • 修饰符 返回值类型 外部类名称方法(参数列表)
  • {class 局部内名称{//}}}*/
    /*小结:
  • public >protected>(default)>private
  • 外部类:public/(default)
  • 成员内部类:public protected default private
  • 局部内部类:什么都不能写。 —*/

局部内部类Outer
代码:

 public class Outer {
public void method()
{
    class Inner{
        int num=10;
        //int num=20;
        public void methodinner()
        {
            System.out.println(num);
        }
    }
    Inner inner=new Inner();//只能在该方法中调用局部内部类的方法!
    inner.methodinner();

}
}

主类:
代码:

public class Demo01Main {

public static void main(String[] args) {
    Outer obj=new Outer();
      obj.method();
}
}

注意事项:

/*局部内部类,如果希望访问所在方法的变量局部,那么这个局部变量必须是final的

  • 备注:从java8开始,只要局部变量事实不变,那么final关键字可以省掉。
    原因(为什么用final修饰)
  • 1.new来出的对象在堆内存中
  • 2.局部变量跟着方法邹,在栈中
  • 3.方法运行结束后,立即出栈,局部变量就会消失。
  • 4.但是new出来的对象还在堆中,直到垃圾回收,如果上述过程执行完毕,对象还想调用局部变量的值,无法调用。所以使用final关键字来修饰。*/

举例:
代码:
public class MyOuter {

int num=10;
public void method()
{
    class Myinner
    {
       /*final*/
        int num=20;
       // num=30;无法更改,fianl定义了!
        public void methodinner()
        {
            System.out.println(MyOuter.this.num);//10
              System.out.println(this.num);//20
        }
    }
    Myinner myinner=new Myinner();
    myinner.methodinner();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值