2013-12-12 3 views
1

При выполнении этого кодаПолучение Исключение в потоке «основной» java.lang.NullPointerException

public class Main 
{ 
public int a; 
public int b; 
public static void main(String []args) 
{ 
    Main []ary=new Main[26]; 
    int i; 
    for(i=0;i<26;i++) 
    { 
     ary[i].a=0; 
     ary[i].b=i; 
    } 
} 
} 

Я получаю следующее сообщение об ошибке ..

Exception in thread "main" java.lang.NullPointerException 
at Main.main(Main.java:11) 

Я создал массив объектов для того же класс и пытается использовать его переменные экземпляра

Хотя я искал его, я не смог найти ошибку.

ответ

4
Main []ary=new Main[26]; 

Вы указали array в нем не заданные значения.

Таким образом, в памяти, массив выглядит Main []ary={null,null ...., null};

NullPointerException

Брошенный, когда приложение пытается использовать нуль в случае, когда требуется объект. К ним относятся:

  • Вызов метода экземпляра пустого объекта.
  • Доступ или изменение поля нулевого объекта.
  • Принимая длину null, как если бы это был массив.
  • Доступ или изменение слотов нулевого значения, как если бы это был массив.
  • Бросание нуль, как если бы это было значение Throwable.

Это как null.a, который вызывает NullPointerException.

for(i=0;i<26;i++) 
    { 
     Main m = new Main(); 
     m.a =0; 
     m.b =i; 
     ary[i]= m; 

    } 
2
Main []ary=new Main[26]; 
    int i; 
    for(i=0;i<26;i++) 
    { 
     ary[i]=new Main(); 
     ary[i].a=0; 
     ary[i].b=i; 
    } 

Это будет работать :)

1

Вам нужно создать экземпляр для каждого из записей массива для того, чтобы доступ к нему:

for(i=0;i<26;i++) 
{ 
    ary[i] = new Main(); // Otherwise ary[i] is null and will cause an exception on the following line 
    ary[i].a=0; 
    ary[i].b=i; 
} 
0

Вы только что создали массив, может содержать экземпляры Main, но вы не инициализировали содержимое, поэтому все элементы массива: null. Перед присвоением значений сделайте ary[i]= new Main().

1

ичных [я] является нулевым

public class Main 
{ 
    public int a; 

    public int b; 

    public static void main(String[] args) 
    { 
     Main[] ary = new Main[26]; 
     int i; 
     for (i = 0; i < 26; i++) 
     { 
      ary[i]=new Main();//<---(here ary[i] was null) 
      ary[i].a = 0; 
      ary[i].b = i; 
     } 
    } 
} 
Смежные вопросы