2012-12-23 71 views
1

任何人都可以请解释为什么静态方法调用非静态方法是非法的吗?从静态方法调用非静态方法

+0

这不是非法的。从非静态方法中,可以隐式地调用另一个实例为“this”的实例。对于静态方法,你必须显式提供一个实例,因为它没有'this'实例。 –

回答

13

一种非静态方法是一种对特定的实例(对象)起作用并可访问该对象的成员的方法实例。静态方法不与特定实例关联。

是合法的调用非静态方法,如果你提供了一个实例:

class Foo 
{ 
    public static void f() 
    { 
     instanceMethod(); // Not OK - no instance provided. 
     this.instanceMethod(); // Not OK - no "this" in static methods. 
     new Foo().instanceMethod(); // OK because you provide an instance 
    } 

    public void instanceMethod() {} 
} 
4

因为打电话给你不需要类,在这里给你打电话需要非静态方法的对象静态方法,

的静态方法与非哪里静态方法与状态(对象)相关类相关

1

非静态的方法是,在一个实例的上下文中执行的方法。没有实例,调用它是没有意义的,所以编译器会阻止你这样做 - 也就是说它是非法的。

如果一个方法不访问任何实例字段(又名实例变量),那么它可能应该改为静态方法。

0

非静态方法有隐含参数this其静态方法都没有(因为没有this) 孤独,因为这实际上是不可能的调用非静态方法形成静态的。

0

静态方法属于该类。非静态方法属于一个实例。

非静态方法需要在其上执行的实例(this)。静态方法不需要任何实例,因为类本身就是它所属的实例。

如果我有100个对象实例,则每个nonStatic()方法调用都会影响不同对象的状态。因此,每个非静态方法都是“不同的”,因为它对不同的实体起作用。 同时,即使我有一个对象的实例,调用staticMethod()也不会影响任何这些实例,因为它只能影响类的静态成员。

每个静态方法或静态成员变量有1个类和1个实例。

对于非静态成员,我们有与该类实例关联的每一种方法。

所以,如果你能够调用非静态方法,从静态方法,100个实例中的哪一个会受到影响?你看:它没有意义。

0

静态方法与类连接。 常规方法连接到对象。

在静态方法中,没有可以运行非静态方法的对象。

0

从静态方法调用非静态方法并非非法。无论何时调用静态方法,都不需要类的实例,而在非静态的情况下,则可以。