为什么这个程序里局部内部类可以访问方法中的非final变量而不报错????

图片说明

不能把类B的定义在成员函数f()里面

局部内部类不能访问局部的,可以访问成员变量(全局的)。
当方法执行完以后,就会出栈,属性也就没有了,但局部内部类的对象可能还在被其他对象引用,但调用的局部属性却没有了,所以,只能调用final的;如果没有明确定义final也可以在局部内部类中使用,但一旦使用就会默认改为是final变量
因为final变量在局部内部类使用时,相当于会拷贝一份,所以尽管方法弹栈了,局部变量还是能使用
之所以能调用,是因为你的类定义在了方法里,方法的a,b变量对于类B来讲都是成员变量