-2

我想创建一个名为 User 的类的数组对象,当我单击复选框时,应该创建该类的新对象。当我运行并单击复选框错误:线程“AWT-EventQueue-0”java.lang 中的异常。空指针异常

public class User
{
    public int user_amt;
    int user_location;
    String user_name;
    private boolean user_isSelected()
    {
            return true;
    }
    int user_id;
User()
{
    user_amt = 0;
    user_location = 0;
    user_name = "NUL";
    user_id = 0;
    user_isSelected();

}

}

class main()
{
 int users_active;
 private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {

        users_active++;
        User[] user = new User();

    }
}
4

3 回答 3

1

只需尝试:

User[] user = new User[5];
user[0] = new User();
于 2013-02-10T09:05:12.987 回答
0

您的代码的问题是您正在创建一个引用数组,但每个引用都必须在堆上创建。

所以User[] user = new User[5]<- 创建 5 个引用

user[0] = new User();<-User在堆上创建 1 个类型的对象并将其分配给user[0]引用。

于 2013-02-10T09:20:24.610 回答
0

以下是完全错误的。

User[] user = new User();

User[] user是用户数组,而new User()是用户的单个实例。

其次,当您使用 C++、C# 或 Java 编码时,您需要放弃所有关于 Visual Basic 的知识,因为您需要在向数组添加成员之前预先分配数组的大小。

你不能做

User[] users;
for(int i=0; i<10; i++){
  users[i] = new User();
}

你必须

User[] users = User[10];
for(int i=0; i<10; i++){
  users[i] = new User();
}

或者

User[] users = {
  new User(), new User(), new User(), new User(), new User(), 
  new User(), new User(), new User(), new User(), new User()
}  

这就是您应该考虑使用 ArrayList 的原因,因为它们是可扩展的。虽然数组不可扩展。

List<User> users = new ArrayList<User>();
for(int i=0; i<10; i++){
  users.add(new User());
}

要获得第 5 个成员,

users.get(4);
于 2013-02-10T09:21:18.733 回答