【问题标题】:Getting non-static method cannot be referenced from a static context error [duplicate]无法从静态上下文错误中引用获取非静态方法 [重复]
【发布时间】:2017-10-28 20:38:56
【问题描述】:

我正在研究 Java 中的内部类。有一个使用具有不同访问修饰符的内部类的示例。我编写了我在书中看到的代码,但我得到了一个我在标题中提到的错误。据我所知我们不能在非静态范围内使用静态变量,方法,但我不明白的是我只在我的字符串数组中得到这个错误。整数数组工作正常。我在这里缺少什么?

package innerclasses;

public class AlanlaraErisim {

private class StringDiziYaz{

    private void diziYaz(String[]dizi){

        for(String x: dizi){

            System.out.println(x + " ");

        }

    }

}


protected class IntegerDiziYaz{

    protected void diziYaz(Integer[]dizi){

        for(Integer x: dizi){

            System.out.println(x + " ");

        }

    }

}



public static void main(String[] args) {

    AlanlaraErisim.StringDiziYaz stringDiziYaz = new AlanlaraErisim().new StringDiziYaz();

    String[] stringDizi = {"abc","def","ghi","jkl","mno"};
    StringDiziYaz.diziYaz(stringDizi);  //Gives the error

    AlanlaraErisim.IntegerDiziYaz integerDiziYaz = new AlanlaraErisim().new IntegerDiziYaz();

    Integer[] intDizi = {1,2,3,4,5,6};  
    integerDiziYaz.diziYaz(intDizi); //Works fine

}}

这是输出:

线程“main”java.lang.RuntimeException 中的异常:无法编译的源代码 - 无法从静态上下文引用非静态方法 diziYaz(java.lang.String[]) 在内部类.AlanlaraErisim.main(AlanlaraErisim.java:42) /Users/sametsahin/Library/Caches/NetBeans/8.2/executor-sn-ps/run.xml:53:Java 返回:1 构建失败(总时间:1 秒)

【问题讨论】:

  • 你的变量名是stringDiziYaz,而不是StringDiziYaz

标签: java arrays static inner-classes


【解决方案1】:

错误告诉你diziYaz() 是一个对象方法(非静态),所以你不能从类中引用它(StringDiziYaz)。您必须使用 StringDiziYaz 类型的对象访问它。

如果你改变了

StringDiziYaz.diziYaz(stringDizi);

stringDiziYaz.diziYaz(stringDizi); // capitalization of stringDiziYaz changed

那么应该没有错误。也许你只是打错字了?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多