我正在研究Java中的内部类。有一个使用不同访问修饰符的内部类的例子。我在书中看到了我编写的代码,但是我在标题中提到了一个错误。我知道我不能在非静态范围内使用静态变量,方法,但我不明白的是我只用我的String数组得到这个错误.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
}}
输出结果:
线程中的异常" main" java.lang.RuntimeException:无法编译的源代码 - 无法从静态上下文引用非静态方法diziYaz(java.lang.String []) 在innerclasses.AlanlaraErisim.main(AlanlaraErisim.java:42) /Users/sametsahin/Library/Caches/NetBeans/8.2/executor-snippets/run.xml:53:Java返回:1 建筑失败(总时间:1秒)
答案 0 :(得分:0)
该错误告诉您diziYaz()
是对象方法(非静态),因此您无法从类(StringDiziYaz
)引用它。您必须使用StringDiziYaz
类型的对象访问它。
如果你改变了
StringDiziYaz.diziYaz(stringDizi);
到
stringDiziYaz.diziYaz(stringDizi); // capitalization of stringDiziYaz changed
那么应该没有错误。也许你只是打错了?