2017-10-28 3 views
0

Ich lerne inneren Klassen in Java.Es gibt ein Beispiel für die Verwendung von inneren Klassen mit verschiedenen Zugriffsmodifikatoren.Ich schrieb den Code nur ich sehe in dem Buch, aber ich bekomme ein Fehler, den ich im Titel erwähnt habe. Wie ich weiß, können wir nicht eine statische Variable verwenden, Methode in einem nicht statischen Bereich, aber was ich nicht verstehe ist, bekomme ich diesen Fehler nur mit meinem String-Array.Integer-Array funktioniert gut.Was bin Ich vermisse hier?Nicht-statische Methode kann nicht aus einem statischen Kontext Fehler

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 

}} 

Das ist der Ausgang:

Exception in thread "main" java.lang.RuntimeException: uncompilable Quellcode - nicht statische Methode diziYaz (java.lang.String []) nicht referenziert werden aus einem statischen Kontext bei innerclasses.AlanlaraErisim.main (AlanlaraErisim.java:42) /Users/sametsahin/Library/Caches/NetBeans/8.2/executor-snippets/run.xml:53: Java zurückgegeben: 1 BUILD FAILED (Gesamtzeit: 1 Sekunde)

+0

Ihr Variablenname ist 'stringDiziYaz', nicht' StringDiziYaz'. – Bubletan

Antwort

0

Der Fehler besagt, dass diziYaz() eine Objektmethode (nicht statisch) ist, so dass Sie nicht von der Klasse (StringDiziYaz) darauf verweisen können. Sie müssen mit einem Objekt vom Typ StringDiziYaz darauf zugreifen.

Wenn Sie

StringDiziYaz.diziYaz(stringDizi); 

zu

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

dann sollte es kein Fehler sein. Vielleicht haben Sie einfach einen Tippfehler gemacht?

Verwandte Themen