Java 空实例上是否可以使用void函数?
我正试图为一个学校项目创建一个互联网的小演示,我决定用Java做这个,因为Java是我最有经验的语言,也是我大部分工作的语言 因此,我为域名系统创建了一个Java 空实例上是否可以使用void函数?,java,Java,我正试图为一个学校项目创建一个互联网的小演示,我决定用Java做这个,因为Java是我最有经验的语言,也是我大部分工作的语言 因此,我为域名系统创建了一个DNS的类型。我还创建了一个表,用于在中存储url和位置。 请参阅以下代码: 类别表: public class Table { private String url; private DNS dns; public Table(){ } public String getURL(){ //Retu
DNS
的类型。我还创建了一个表
,用于在中存储url和位置。
请参阅以下代码:
类别表:
public class Table {
private String url;
private DNS dns;
public Table(){
}
public String getURL(){ //Return url of a server
return this.url;
}
public void add(Something something){
//Some code to add something
}
}
类别DNS:
public class DNS {
private Table[] table = new Table[50];
public DNS(){
//Some code here
}
public void add(Something something){ //Add a server to the DNS' table
int i = 0;
while(this.table[i].getURL() != null){ //NullPointerException
i++;
}
this.table[i].add(something);
}
}
如果我想使用DNS类中的void add()
,我必须知道表中的下一个空位置是什么。因此,我尝试检索一些url
,如果它说url==null
,我知道我有一个空位置。
但是,我在while(this.table[I].getURL()!=null)处得到一个NullPointerException
{
。这让我想知道是否有可能返回一个null
的变量。这有可能吗?如果有,我在这里做错了什么?对于您的用例,使用java.util.List
要容易得多。事实上,我建议使用java.util.ArrayList
它就像一个数组,只是它可以增长
表[i]
方法存在问题,因为在当前的代码设置中,您没有正确地检测到最大i,因此,您走过数组的末尾。要以数组方式修复它,您将使用for循环
for (int i = 0; i < table.length; i++) {
// now we will loop between 0 and the last element of the array.
... table[i] ...
}
<>除了使条目更容易添加之外,<>代码> ARARYLIST//>将使条目更容易移除。没有它,通常你必须编写一些代码来将项目移动到数组中间的孔中,如果你每次删除一个条目。 < P>对于你的用例,使用<代码> java .UTIL.List要容易得多。实际上,我建议使用java.util.ArrayList
它就像一个数组,只是它可以增长
表[i]
方法存在问题,因为在当前的代码设置中,您没有正确地检测到最大i,因此,您走过数组的末尾。要以数组方式修复它,您将使用for循环
for (int i = 0; i < table.length; i++) {
// now we will loop between 0 and the last element of the array.
... table[i] ...
}
<> P>除了使条目更容易添加之外,<>代码> AlayList将更容易移除条目。没有它,通常你必须编写一些代码来将项目移动到数组中间的孔中,如果每次删除一个条目。 < p>初始化了<代码>表< /代码>数组,但尚未初始化任何条目。,因此它们都是null
。
例如,您可以在构造函数中执行以下操作:
public DNS(){
for (int i = 0; i < table.length; ++i) {
table[i] = new Table();
}
}
publicdns(){
对于(int i=0;i
您已经初始化了表
数组,但尚未初始化其任何成员,因此它们都是null
。
例如,您可以在构造函数中执行以下操作:
public DNS(){
for (int i = 0; i < table.length; ++i) {
table[i] = new Table();
}
}
publicdns(){
对于(int i=0;i
可以返回空变量,但您可以简单地检查此.table[i]!=null。
可以返回空变量,但您可以简单地检查此.table[i]!=null。
等等,你是在问为什么你会得到NPE,或者如果你的方法是用void
声明的,是否有可能返回一些东西?一个void方法public void getURL()
不能返回值。这是一个输入错误吗?你的测试不应该是这个表[i]!=null?
@Eran这是一个输入错误,ty。等等,你是在问为什么你会得到NPE,或者如果你的方法是用void
声明的,是否有可能返回一些东西?void方法public void getURL()
不能返回值。这是一个输入错误吗?你的测试不应该是这个表[i]!=null?
@Eran这是一个输入错误,ty。除了多种类型之外,是否执行ArrayList
,如我的案例DNS
和String
?@EdwinBuckYes,一个ArrayList
可以容纳任何对象。除了多种类型之外,是否执行ArrayList
,如我的案例DNS
和String
?@EdwinBuckYes,一个Ar光线列表
可以容纳任何对象。好吧,这很有效。我从来没有想过这一点,因为我不使用字符串[]
,但我想使用字符串[]
这是在它的构造函数中完成的,对吗?新字符串[50]
还将为您提供一个50null
s的数组。这是有意义的,因为我检查了null
实例的字段,我得到了null
返回,因为实例是null
,因此字段也是。我现在得到了它!谢谢。这是有效的。我从来没有想到过这一点,因为我没有使用de>String[]
,但我想使用String[]
这是在它的构造函数中完成的,对吗?新字符串[50]
还将为您提供一个50null
s的数组。这很有意义,因为我检查了null
实例的字段,所以返回了null
,因为实例是null
,因此字段也是。我现在就得到了它!谢谢。