Java 为什么内部类实例变量可以';t mofidy是外部类实例变量,但内部类局部变量可以

Java 为什么内部类实例变量可以';t mofidy是外部类实例变量,但内部类局部变量可以,java,anonymous-inner-class,Java,Anonymous Inner Class,为什么test变量在localClassMethod内部和tt方法外部发生编译错误,但在tt方法中编译是正常的。 表示内部类实例变量不能替代外部类实例变量,但内部类局部变量可以修改外部类实例变量。 public class Outer { int test = 0; void classMethod() { class localClassInMethod { int k = test;//compile ok t

为什么
test
变量在localClassMethod内部和tt方法外部发生编译错误,但在tt方法中编译是正常的。 表示内部类实例变量不能替代外部类实例变量,但内部类局部变量可以修改外部类实例变量。

public class Outer {
    int test = 0;

    void classMethod() {
        class localClassInMethod {
            int k = test;//compile ok
            test = 1;//compile error

            public void tt() {
                test++;//compile ok
                int m = test;//compile ok
            }
        }
    }
}

虽然线条看起来相似,但它们并不相同:

公共类外部{
int test=0;//这是一个带有初始值设定项的字段声明。
void classMethod(){
类localClassInMethod{
int k=test;//这是一个带有初始值设定项的字段声明。
test=1;//这是一个赋值语句,这些语句只是
//在方法体或初始值设定项块内有效。
公共图书馆{
test++;//这是一个增量后表达式语句。
int m=test;//这是一个局部变量声明,带有初始值设定项。
test=2;//赋值语句在此处有效。
}
}
}
}
如果要在创建
localClassInMethod
的新实例时运行代码将值
1
分配给字段
test
,请使用实例初始值设定项块:

class localClassInMethod{
int k=测试;
{//初始值设定项块。
test=1;//赋值语句在此处有效。
}
公共图书馆{
...
}
}
这与将语句放入每个构造函数中相同:

class localClassInMethod{
int k=测试;
公共localClassInMethod(){
test=1;//赋值语句在此处有效。
}
公共图书馆{
...
}
}

虽然这些线条看起来很相似,但它们并不相同:

公共类外部{
int test=0;//这是一个带有初始值设定项的字段声明。
void classMethod(){
类localClassInMethod{
int k=test;//这是一个带有初始值设定项的字段声明。
test=1;//这是一个赋值语句,这些语句只是
//在方法体或初始值设定项块内有效。
公共图书馆{
test++;//这是一个增量后表达式语句。
int m=test;//这是一个局部变量声明,带有初始值设定项。
test=2;//赋值语句在此处有效。
}
}
}
}
如果要在创建
localClassInMethod
的新实例时运行代码将值
1
分配给字段
test
,请使用实例初始值设定项块:

class localClassInMethod{
int k=测试;
{//初始值设定项块。
test=1;//赋值语句在此处有效。
}
公共图书馆{
...
}
}
这与将语句放入每个构造函数中相同:

class localClassInMethod{
int k=测试;
公共localClassInMethod(){
test=1;//赋值语句在此处有效。
}
公共图书馆{
...
}
}

no,你可以看到它是compile ok,内部类在方法中。你不能在类主体(外部函数)中设置任何东西(除了声明)。哇,我直到现在才知道你可以将类放在方法中@rockwe的原因是Java设计者就是这样决定设计语言的。类包含字段声明、静态和初始化块、构造函数和方法。不是随机的可执行指令。它们进入方法、构造函数和初始化块。@Sweeper是的!我相信它们被称为。不,你可以看到它是可编译的,并且方法内部的类。你不能在类主体(函数外部)中设置任何东西(除了声明)。哇,直到现在我才知道你可以将类放在方法内部@rockwe的原因是Java设计者就是这样决定设计语言的。类包含字段声明、静态和初始化块、构造函数和方法。不是随机的可执行指令。它们进入方法、构造函数和初始化块。@Sweeper是的!我相信他们被称为。