Java 为什么这个变量的可访问性与另一个类中的一个类的内部类如此不同

Java 为什么这个变量的可访问性与另一个类中的一个类的内部类如此不同,java,class,variables,Java,Class,Variables,为什么不能从类内部访问d b可以从同一个类访问吗 public class Outer { public int a = 1; private int b = 2; public void method(final int c) { int d = 3; class Inner { private void iMethod(int e) { } } } } 这是因为

为什么不能从类内部访问d b可以从同一个类访问吗

public class Outer {
    public int a = 1;
    private int b = 2;

    public void method(final int c) {
        int d = 3;
        class Inner {
            private void iMethod(int e) {
            }
        }
    }
}

这是因为
a
b
类外部的属性
,而
d
是名为
method
的方法内部的变量。因此,它也应该可以访问
d

下面是一个来自中国的例子

在Java中,我们可以在一个方法中编写一个类,这将是一个本地类 类型。与局部变量一样,内部类的范围也受到限制 在方法内部

方法本地内部类只能在方法内实例化 其中定义了内部类。下面的程序显示了如何 使用本地内部类的方法

这是方法内部类23

内部
是一个,因为它是在Java代码块中本地声明的,而不是作为类的成员声明的。 因此,
内部
可以访问包含类
外部
的任何成员,如
a
b
,包括私有成员。 它无法访问
d
,因为
d
未声明为
final
,适用于Java版本7及更高版本

[…]局部类可以使用局部变量、方法参数,甚至 在其范围内的异常参数,但仅当 变量或参数被声明为final。这是因为 本地类实例的生存期可能比 在其中定义类的方法的执行。为此 因此,本地类必须具有所有本地类的私有内部副本 它使用的变量(这些副本由 编译器)。确保局部变量和 私有副本总是一样的,就是坚持局部变量 这是最终决定


请参阅。

与类内部实例的生存期相比,考虑一下d的生存期。虽然语言支持它,但最好不要在方法中定义类……它应该是可访问的。你凭什么认为不是?你是在运行Java 8还是更早的版本?我在一个在线测试中发现了这个问题,他们显示d不是..这就是为什么..你在问这个问题之前试过编译这个代码吗?你做了什么研究?@SotiriosDelimanolis纠正了答案。
public class Outerclass{

//instance method of the outer class 
 void my_Method(){
  int num = 23;

  //method-local inner class
  class MethodInner_Demo{
     public void print(){
        System.out.println("This is method inner class "+num);     
     }   
  }//end of inner class

  //Accessing the inner class
  MethodInner_Demo inner = new MethodInner_Demo();
  inner.print();
}

public static void main(String args[]){
  Outerclass outer = new Outerclass();
  outer.my_Method();           
 }
}