java.lang.NullPointerException 即使它被实例化为全局变量
java.lang.NullPointerException even though it's instanciated as global var
我的问题通常很简单,但我就是看不出问题出在哪里。
-我正在声明一个 class 的数组作为全局变量,我在另一个 class 中的多个函数中重复使用它。
class 实例化为:
public class Service {
int numticketsin;
String name="mi";
int[] perhour={0,0,0,0,0,0,0,0,0,0};
int moyenneticketperday;
int[] moyenneticketperdayperhour={0,0,0,0,0,0,0,0,0,0};
public Service(){}
}
全局变量:
Service[] services=new Service[10];
我尝试填充数组的函数:
public void getnamesofservices(){
int x=0;
Connection conn=db.java_db();
try {
Statement stmt = conn.createStatement();
String qry = "SELECT service_name from service ";
ResultSet rs = stmt.executeQuery(qry);
int i=0;
while (rs.next()) {
String namee=rs.getString("service_name");
System.out.println(namee);
services[i].name = namee;
i++;
}
conn.close();
}
catch (SQLException ex)
{
System.err.println("SQLException: " + ex);
}
}
错误:
''' Exception in thread "main" java.lang.NullPointerException: Cannot assign field "name" because "this.services[i]" is null
at com.mycompany.stats.NewJFrame.getnamesofservices(NewJFrame.java:195)
at com.mycompany.stats.NewJFrame.<init>(NewJFrame.java:122)
at com.mycompany.stats.Main.main(Main.java:16)'''
提前致谢!!
Service[] services=new Service[10];
这意味着您创建了包含 10 个位置的数组,但所有这些位置都是空的(这意味着它们在数组的每个位置中都有 null
)。
因此,当尝试 services[i].name
时,您会得到 NullPointerException
,因为 services[i]
是 null
。
有很多方法可以进行初始化,这取决于您的业务案例。但仅举出两种可能性:
- 在声明处初始化它:
Service services[] = new Service[] {
new Service(),new Service(), new Service(), new Service(),new Service(),
new Service(),new Service(), new Service(), new Service(),new Service()
};
- 或者在使用它之前,以防你没有覆盖它:
services[i] = new Service();
services[i].name = namee;
我的问题通常很简单,但我就是看不出问题出在哪里。 -我正在声明一个 class 的数组作为全局变量,我在另一个 class 中的多个函数中重复使用它。 class 实例化为:
public class Service {
int numticketsin;
String name="mi";
int[] perhour={0,0,0,0,0,0,0,0,0,0};
int moyenneticketperday;
int[] moyenneticketperdayperhour={0,0,0,0,0,0,0,0,0,0};
public Service(){}
}
全局变量:
Service[] services=new Service[10];
我尝试填充数组的函数:
public void getnamesofservices(){
int x=0;
Connection conn=db.java_db();
try {
Statement stmt = conn.createStatement();
String qry = "SELECT service_name from service ";
ResultSet rs = stmt.executeQuery(qry);
int i=0;
while (rs.next()) {
String namee=rs.getString("service_name");
System.out.println(namee);
services[i].name = namee;
i++;
}
conn.close();
}
catch (SQLException ex)
{
System.err.println("SQLException: " + ex);
}
}
错误:
''' Exception in thread "main" java.lang.NullPointerException: Cannot assign field "name" because "this.services[i]" is null
at com.mycompany.stats.NewJFrame.getnamesofservices(NewJFrame.java:195)
at com.mycompany.stats.NewJFrame.<init>(NewJFrame.java:122)
at com.mycompany.stats.Main.main(Main.java:16)'''
提前致谢!!
Service[] services=new Service[10];
这意味着您创建了包含 10 个位置的数组,但所有这些位置都是空的(这意味着它们在数组的每个位置中都有 null
)。
因此,当尝试 services[i].name
时,您会得到 NullPointerException
,因为 services[i]
是 null
。
有很多方法可以进行初始化,这取决于您的业务案例。但仅举出两种可能性:
- 在声明处初始化它:
Service services[] = new Service[] {
new Service(),new Service(), new Service(), new Service(),new Service(),
new Service(),new Service(), new Service(), new Service(),new Service()
};
- 或者在使用它之前,以防你没有覆盖它:
services[i] = new Service();
services[i].name = namee;