我必须在两个班级中分享String[]
。一个类设置数组,另一个类获取数组。我做了四节课。一个包含超类级别的Array,并在子类中访问该数组。一个班级持有main()
他们在这里。
ApplicationDataPool.java
public class ApplicationDataPool extends JFrame {
String[] thisContact;
public ApplicationDataPool() {
super("Update Record");
}
public String[] getThisContact() {
return thisContact;
}
public void setThisContact(String[] thisContact) {
this.thisContact = thisContact;
}
}
UpdateProcessStepOneFrame.java
public class UpdateProcessStepOneFrame extends ApplicationDataPool {
public UpdateProcessStepOneFrame() {
String[] something = { "fname", "lname" };
setThisContact(something);
UpdateProcessStepTwoFrame step2 = new UpdateProcessStepTwoFrame();
step2.setVisible(true);
}
}
UpdateProcessStepTwoFrame.java
public class UpdateProcessStepTwoFrame extends ApplicationDataPool{
public UpdateProcessStepTwoFrame(){
String[] theContact = getThisContact();
//Here is the problem
//Exception in thread "main" java.lang.NullPointerException
System.out.println(theContact.length);
}
}
问题:每当我在任何地方访问数组时,Java都会抛出NullPointerException
。为什么会这样呢?我该如何纠正?
答案 0 :(得分:3)
您创建的thisContact
或UpdateProcessStepOneFrame
实例<{1}}变量拥有。如果您想在UpdateProcessStepTwoFrame
的所有实例之间共享thisContact
,则必须将其定义为ApplicationDataPool
。这意味着变量将由类拥有而不是其实例。
static
答案 1 :(得分:1)
班级UpdateProcessStepOneFrame
和UpdateProcessStepTwoFrame
彼此不了解,因此您需要在setThisContact(something)
班级UpdateProcessStepTwoFrame
进行getThisContact
才能{{1}}不是空的。
答案 2 :(得分:0)
有两个不同的类...所以String [] theContact在第二个类中将为null,除非你设置它...
答案 3 :(得分:0)
第一次致电
setThisContact(something);
设置UpdateProcessStepOneFrame对象的数组(通过基类)。
然后执行此操作时:
UpdateProcessStepTwoFrame step2 = new UpdateProcessStepTwoFrame();
你正在用一个独立的数组创建一个新对象,它永远不会初始化,因此会在theContact.length上抛出一个NPE