2017-10-28 175 views
0

我学习的Java.There内部类是采用内部类与不同的访问的一个例子modifiers.I写的代码只是我看的书,但我得到一个错误,我在标题中提到。我知道我们不能使用静态变量,方法在非静态范围内,但我不明白的是,我得到这个错误只与我的字符串数组..Integer数组工作正常。什么是我错过了吗?获取非静态方法不能从静态上下文引用的错误

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 

}} 

那输出:

异常在线程 “主” 了java.lang.RuntimeException:不可编译源代码 - 非静态方法diziYaz(java.lang.String中[])不能被引用从静态上下文 at innerclasses.AlanlaraErisim.main(AlanlaraErisim.java:42) /Users/sametsahin/Library/Caches/NetBeans/8.2/executor-snippets/run.xml:53:Java返回:1 BUILD FAILED(总时间:1秒)

+0

你的变量名是'stringDiziYaz',而不是'StringDiziYaz'。 – Bubletan

回答

0

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

如果更改

StringDiziYaz.diziYaz(stringDizi); 

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

话,应该没有错误。也许你只是犯了一个错字?

相关问题