原来我是个白痴。从另一个调用r.nextInt()抛出异常,该调用将未初始化的变量作为参数!脚很大。
我真的不确定还有什么要说的:
Random r = new Random();
class SomeClass {
public SomeClass(){
new SomeClass(r.nextInt(5));
}
public SomeClass(int i){
...
抛出NullPointerException
,其中调用r.nextInt(5)。有什么想法吗?
答案 0 :(得分:5)
根据documentation,如果参数不是正数,则nextInt仅抛出IllegalArgumentException
。
我的猜测是你不用文字常量5来调用它,而是用一些恰好为零(或负数)的变量来调用它。
答案 1 :(得分:1)
我不确定你打算用这个做什么,
public SomeClass(){
new SomeClass(r.nextInt(5));
}
但我怀疑正确的语法(如果你想调用其他构造函数)是
public SomeClass(){
this(r.nextInt(5));
}
您应该发布外部类的代码以了解您的问题。
答案 2 :(得分:1)
原来我是个白痴。另一个异常是从同一行上的另一个r.nextInt()调用引发的,该行将未初始化的变量作为参数!脚非常在嘴里。将来会仔细阅读。
答案 3 :(得分:1)
我尝试使用示例代码重现您的问题。但它有效..
import java.util.Random;
公共课测试{
public static void main(String[] args) {
Test test1 = new Test();
SomeClass obj = test1.new SomeClass();
}
private Random r = new Random();
class SomeClass {
public SomeClass(){
new SomeClass(r.nextInt(5));
}
public SomeClass(int i){
System.out.println(i);
}
}
}
答案 4 :(得分:1)
评论太长,但此代码编译并在没有NPE的情况下运行。您需要显示有问题的代码。从当前代码中提取一个演示该问题的简短示例。
import java.util.Random;
public class SomeOtherClass {
Random r = new Random();
class SomeClass {
public SomeClass() {
/***/
new SomeClass(r.nextInt(5));
/*/
this(r.nextInt(5)); // Or this.
/***/
}
public SomeClass(int i){
// ...
}
}
public SomeOtherClass() {
new SomeClass();
}
public static void main(String[] args) {
new SomeOtherClass();
}
}