2017-10-28 177 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 

話,應該沒有錯誤。也許你只是犯了一個錯字?

相關問題