我试图通过在Stanovanje中使用int postle来获取seznam2的长度。但是,变量getPostle()没有通过,我在线程" main"中得到了Exception。此行的java.lang.NullPointerException错误:
private String[] seznam2 = new String[getStanovanje().getPostle()].
我还想知道何时使用:
Stanovanje stanovanje = new Stanovanje();
或
private Stanovanje stanovanje1;
这是我的代码:
Potovanje.java
public class Potovanje {
Stanovanje stanovanje = new Stanovanje();
private Stanovanje stanovanje1;
private String datumOdhoda;
private int trajanje;
private Popotnik[] popotnik;
private ArrayList<Popotnik> seznam = new ArrayList<>();
private String[] seznam2 = new String[getStanovanje().getPostle()];
public Potovanje(String datumOdhoda, int trajanje){
this.datumOdhoda = datumOdhoda;
this.trajanje = trajanje;
}
public void setStanovanje(Stanovanje stanovanje1){
this.stanovanje1 = stanovanje1;
}
public Stanovanje getStanovanje(){
return stanovanje1;
}
public void setPopotnik(Popotnik[] popotnik){
this.popotnik = popotnik;
}
public Popotnik[] getPopotnik(){
return popotnik;
}
public ArrayList<Popotnik> getSeznam(){
return seznam;
}
public void setSeznam2(String[] seznam2){
this.seznam2 = seznam2;
}
public String[] getSeznam2(){
return seznam2;
}
public void dodajPotnika(Popotnik[] popotnik){
//System.out.println("postle: " + stanovanje.getPostle());
for(int i=0; i<getSeznam2().length; i++){
//System.out.println("wadap");
setPopotnik(popotnik);
seznam.add(getPopotnik()[i]);
}
}
public String toString(){
return "datumOdhoda: " + datumOdhoda + "\n" + "trajanje: " + trajanje + "\n" + "popotnik: " + getPopotnik();
}
}
Stanovanje.java
public class Stanovanje {
private int postle;
public Stanovanje(){
}
public Stanovanje(int postle){
this.postle = postle;
}
public void setPostle(int postle){
this.postle = postle;
}
public int getPostle(){
return postle;
}
public String toString(){
return "postle: " + postle;
}
}
答案 0 :(得分:1)
1和2之间的区别:
#1048 - Column 'created_date' cannot be null
是:
1:具有默认可见性(即“package-private”)并立即初始化。 (不是/*1*/ Stanovanje stanovanje = new Stanovanje();
/*2*/ private Stanovanje stanovanje1;
)
2:null
可见度且未初始化(因此== private
,直到另行初始化)
何时使用这些内容很难回答,因为很多情况下您可能更喜欢这一种。
如果使用第二个,则应在构造函数中初始化它。通过在那里创建实例或将其初始化为CTOR-Argument。否则,您的对象未正确初始化,并且使用会导致您遇到的问题:像NPE这样的副作用。
在某些情况下(实际上很少需要的重物),在真正需要之前将它们保持未初始化(有时称为“延迟加载”)会很有用。然后,人们将使用一个getter来检查字段是否已经初始化,如果没有,则在返回之前这样做。
关于可见性,您可以在此处阅读:Controlling Access to Members of a Class(Oracle文档) 那里的神谕“经验法则”:
使用
null
除非你有充分的理由不这样做。