【问题标题】:Confusion about static keyword关于静态关键字的困惑
【发布时间】:2012-05-09 13:17:40
【问题描述】:

我刚刚在一篇文档中读到“静态方法只能调用其他静态方法,而不能从中调用非静态方法”。但是当我尝试测试它时,我认为看到了一些不同的东西。

我有一个 C 类,如下所述

import pckage1.*;

public class C
{

public static void main(String par[])
{       
}
public static void cc() 
{
    A ob = new A();
    ob.accessA(0);      
}   

}

A 类在哪里

package pckage1;

public class A 
{
public A() 
{
}
public void accessA(int x)
{   
}

}

现在这里从 C 类中的 cc STATIC 方法调用了一个非 STATIC 方法 accessA()。如果关于静态方法的说法是真的,那怎么可能呢?

【问题讨论】:

标签: java oop static


【解决方案1】:

静态方法只能调用其他静态方法,不能从中调用非静态方法

这是错误

静态方法可以调用非静态方法,只要它们有对象可以调用方法on(正如您在代码 sn-p 中发现的那样)。非静态方法曾经会如何被调用?

不能从静态方法执行nonStaticFoo(),因为它被解释为this.nonStaticFoo(),并且因为静态方法中没有this

今天早些时候非常相似的问题:

【讨论】:

    【解决方案2】:

    你没有调用你的类的非静态方法。

    试试这个:

    import pckage1.*;
    
    public class C
    {
    
    public static void main(String par[])
    {       
    }
    public static void cc() 
    {
        A ob = new A();
        ob.accessA(0);  
        print();    
    }   
    
    public void print() 
    {
    
    }   
    }
    

    它不起作用,因为您从静态方法调用非静态方法,并且您没有 C 类的实例可以在静态方法中使用。

    【讨论】:

      【解决方案3】:

      由于每个 Java 程序都是从静态方法开始执行的,如果你引用的陈述是真的,那么任何 Java 程序都没有办法执行实例方法!

      【讨论】:

        【解决方案4】:

        静态方法在 C 中没有默认上下文,也没有 this

        但是任何方法都可以使用类的实例来调用方法。

        【讨论】:

          【解决方案5】:

          你在一个实例上调用一个实例方法——你不是试图直接调用一个实例方法。

          【讨论】:

            【解决方案6】:

            您正在创建一个类 A 的实例并在其上调用一个方法。 所以你调用的方法是实例方法(不是静态方法)。 但是你不能调用 C 类的非静态方法。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-09-07
              • 2015-10-16
              • 2019-05-17
              • 2020-03-06
              • 2016-03-16
              • 2013-07-27
              • 1970-01-01
              • 2012-09-20
              相关资源
              最近更新 更多