mossypne
mossypne

Reputation: 15

Java Class confusion?

I have a class called user that contains the the two variables name and age.

package test;

public class user {
String name;
int age;

}

Then in my main.java i'm creating an array of that class type.

package test;
public class main {
public static void main(String[] args) {
    user[] array = new user[2];
    array[0].name = "ryan";
    array[0].age = 18;
    array[1].name ="Ryan";
    array[1].age = 17;
    for(int i = 0; i < 1; i++){
        System.out.println(array[i].name);
        System.out.println(array[i].age);
    }
    }
}

However i get this error.

Exception in thread "main" java.lang.NullPointerException
at test.main.main(main.java:5)

Any help?

Upvotes: 0

Views: 53

Answers (5)

Maxim Shoustin
Maxim Shoustin

Reputation: 77930

You created only place for two Users. Write:

array[0] = new User();

And your example will work for you:

public static void main(String[] args) {
    User[] array = new User[2];

    array[0] = new User();       
    array[0].name = "ryan";
    array[0].age = 18;

    array[1] = new User(); 
    array[1].name ="Ryan";
    array[1].age = 17;

    for(int i = 0; i < array.length; i++){
        System.out.println(array[i].name);
        System.out.println(array[i].age);
    }
}

Upvotes: 1

Juned Ahsan
Juned Ahsan

Reputation: 68715

user[] array = new user[2];

is just a definition of array but the elements of arrays are NOT initialized/are NULL. Hence accessing an attribute or method will result in NullPointerException. You should initialize array element before using them, like this:

array[0] = new user();
array[1] = new user();

Upvotes: 2

Ross Drew
Ross Drew

Reputation: 8246

There is no object to assign a value to at

 array[0].name = "ryan";

All you have is an array of variables that nothing has been assigned to as yet. You need to create one first for each address in the array...

 array[0] = new user();

then set it's name.

Also, class names should be uppercase User, not user

Lastly, if you are stepping through an array you are better to use it's size rather than a hard coded number

for(int i = 0; i < array.length; i++)

Better yet, do a for-each

 for (user u : array)  //for each user in array
 {
  System.out.println(u.name);
  System.out.println(u.age);
 }

Upvotes: 0

Maroun
Maroun

Reputation: 96018

References are initialized to null by default in Java - JLS:

For all reference types (§4.3), the default value is null.

So writing array[0].name = "ryan"; is like writing null.name = "ryan"; which causes the exception.

You should initialize each object in the array. Also please follow Java Naming Conventions and change user to User.

Upvotes: 2

deviantfan
deviantfan

Reputation: 11434

You need to make "new" objects too. Only the array is not sufficient

Upvotes: 1

Related Questions