使用ArrayList出现NullPointerException...帮忙
--------------------编程问答-------------------- Test类在init方法 时候admin这个变量没有被实例化
import java.io.*;
import java.util.*;
public class Test
{
Admin admin; //实例化管理员类-----这样只是声明,根本没有实例化
public static void main(String[] args) throws Exception
{
Scanner scan = new Scanner(System.in);
Test test = new Test();
test.initAdmin();
}
public void initAdmin()
{
admin=new Admin();//这里实例化
admin.adList.add(new Admin("Rin","admin","admin"));
}
}
--------------------编程问答--------------------
public class Admin extends User
{
ArrayList adList = new ArrayList();
//ArrayList adList = null;
public Admin(){}
public Admin(String adID, String adPwd, String uType)
{
//adList = new ArrayList();
this.userID = adID;
this.userPassword = adPwd;
this.userType = uType;
}
}
--------------------编程问答-------------------- 感谢楼上两位大大,不过一楼的方法用过后还是会报错:
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
Admin admin; //实例化管理员类
public static void main(String[] args) throws ClassNotFoundException {//把NotFoundException 改为 ClassNotFoundException
Scanner scan = new Scanner(System.in);
Test test = new Test();
test.initAdmin();
}
public void initAdmin() {
admin.adList.add(new Admin("Rin", "admin", "admin"));
}
}
//----------------------------------
//用来创建存储Admin信息的Admin类
class Admin extends User {
public static ArrayList adList = new ArrayList();//前面添加一个public static
//ArrayList adList = null;
public Admin(String adID, String adPwd, String uType) {
//adList = new ArrayList();
this.userID = adID;
this.userPassword = adPwd;
this.userType = uType;
}
}
//------------------------------------------
//Admin继承的User类
abstract class User {
public String userID;
public String userPassword;
public String userType;
}
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - constructor Admin in class test.Admin cannot be applied to given types;
required: java.lang.String,java.lang.String,java.lang.String
found: no arguments
reason: actual and formal argument lists differ in length
然后,为什么像二楼那样加一个public static就可以了呢...
然后,加了这个声明后,如果以后再程序中想往adList中添加元素是不是可以呢? --------------------编程问答-------------------- 你也太弱了吧,你就不知道import Admin这个类?
CSDN上完全不懂Java的人太多,实在无语,你们这个水平只能给你们“喂食”稍微遇到一点问题就不懂自己解决,给你贴出来你只需要复制粘贴的代码
别说我代码有问题,是你不自己import,这次直接使用default的class写在一个Java里面
import java.io.*;
import java.util.*;
public class Test11
{
Admin admin; //实例化管理员类
public static void main(String[] args) throws Exception
{
Scanner scan = new Scanner(System.in);
Test11 test = new Test11();
test.initAdmin();
}
public void initAdmin()
{
admin=new Admin();
admin.adList.add(new Admin("Rin","admin","admin"));
}
}
class Admin extends User
{
ArrayList adList = new ArrayList();
//ArrayList adList = null;
public Admin(){}
public Admin(String adID, String adPwd, String uType)
{
//adList = new ArrayList();
this.userID = adID;
this.userPassword = adPwd;
this.userType = uType;
}
}
abstract class User
{
public String userID;
public String userPassword;
public String userType;
}
--------------------编程问答-------------------- 四楼给你很详细的答案 ,我看你给我散多少分 --------------------编程问答-------------------- 一.如果按你的源程序来说, Admin admin; //实例化管理员类.这句代码没有创建Admin类的对象,它的ArrayList类成员变量list自然也没有得到实例化,所以在add元素的时候会报空指针错误.
二.1楼的方法中是没有错的,在调用initAdmin()方法时进行了Admin对象的实例化.整个代码可以运行.
只不过他贴出来的代码中少了User类.可能是这个原因吧.
三.2楼的方法也很好,将ArrayList类成员变量list设为静态的,这样不需要Admin对象实例化,这个list也存在了(静态成员变量在使用这个类的时候就被创建了).所以后面的add方法得以执行.
不过admin.adlist最好改成Admin.adlist.因为静态成员变量一般由类名调用,而不是由对象调用. --------------------编程问答-------------------- 空指针的问题一般很好找吧。 --------------------编程问答-------------------- Exception in thread "main" java.lang.NullPointerException:一看就知道是没得创建对象的。
Admin admin 只是创建一个引用 ,没得开辟空间的。 --------------------编程问答-------------------- debug跟下,空指针是比较好找的 --------------------编程问答-------------------- 你是没有定义默认的构造函数吧,因为你显式的定义了有参数的构造函数,而你在初始化Admin的时候是用的默认的构造函数(无参的),所以一样会报错。
补充:Java , Java SE