为什么我们不能用“这个”关键字在静态方法(Why can't we use 'thi

2019-06-17 13:38发布

class Sub {
    static int y;
    public static void foo() {
         this.y = 10;
    }
}

据我所知, this代表调用该方法的对象和静态方法不绑定到任何物体。 但在上述情况中,变量y也是静态的。

如果我们能够类对象上调用静态方法,我们为什么不能让静态方法来设置类的静态变量。

这是什么额外的约束的目的是什么?

Answer 1:

因为this是指对象实例。 有一个静态方法的调用没有对象实例。 当然,你可以访问你的静态字段(只有静态的!)。 只要使用

class Sub {
    static int y;
    public static void foo() {
         y = 10;
    }
}

如果你想确保你得到的静态字段y并没有使用相同的名称一些局部变量,使用类名来指定:

class Sub {
    static int y;
    public static void foo(int y) {
         Sub.y = y;
    }
}


Answer 2:

最主要的原因,为什么我们不能用“这个”静态方法方面: -

这一点: - “这”是指当前类对象,所以它明确表示,“这个”只来在画面中,一旦我们旨在创建一个类的对象。

静态方法: - 没有必要为了使用静态方法来创建一个对象。 意思是“实例”或对象创建不与“静态”任何意义按照Java规则。

所以会有矛盾,如果我们同时使用两者(静态和本)。 这是我们不能在静态方法“这个”使用的原因。



Answer 3:

this指的是该对象的这个实例Sub 。 作为该方法是static ,没有一个实例Sub



Answer 4:

为了使你的代码编写工作是这样的:

class Sub {
    static int y;
    public static void foo() {
         Sub.y = 10;
    }
}

您可以在静态方法设置静态字段,但是你没有进入this静态的方法,因为this代表了对象的当前实例,并且在静态方法中,你有没有实例。



Answer 5:

这意味着,“这个”对象,但没有一个。 在你的情况下,@tibtof建议你可以使用类名。



Answer 6:

关键字“这”指的是你是操作的对象。 在你的情况下,这个任何非静态方法或构造函数里面(如果你有一个,如果你用“这个”内部的),然后在“这”指的是类的特定实例Sub.So它只适用时,对象被创建。 但是,在一个类的静态背景下任何东西,你可以使用,甚至没有创建该对象,因为它是在类加载过程中解决。 创建对象时,“这”只是解决了(你甚至可以说,对于动态哪个对象)。 因此,“这个”使静态上下文意义。 希望能帮助到你。 上帝保佑。



Answer 7:

关键字“this”是仅在其中创建一个对象的一个​​实例适用。 而在静态方法没有创建实例,因为静态方法属于类区域。



Answer 8:

我同意谁在我面前说其他人。 让我尝试在不同的方式来回答这个问题:

我想,实例方法/非静态方法属于一个类的实例(意思是我们迟早需要体REF访问它),这样的实例块或方法中的this关键字是有意义的。 但是static关键字类的任何成员被解释为直接资产类,如果存在则对象访问它。 因此,在静态情况下它不是确定对象存在的地方。 这就是为什么使用这里面的静态区域Java不允许。



Answer 9:

当我们声明变量和方法是静态的,那么这是通过共享对象,其中该关键字仅指向当前对象间。 假设你已经创建类Foo则仅作出所有切丝(int y)对的一个副本的5个物object.so如果您访问INTŸ使用此关键字,然后编译器得到哪个对象有一点,因为静态INT y被共享的歧义所有对象。 你必须使用类名访问静态变量。



文章来源: Why can't we use 'this' keyword in a static method