2016-05-12 49 views
0

我想创建一个递归方法(函数)。此方法处理另一个类的对象,其中每个类的实例都有3个Integer字段。 (整数var1,var2,var3;)。我想知道是否有“变量可能未被初始化”的异常或错误,所以在这种情况下,该方法将停止。起初,我认为它会抛出nullPointerException,因为它是一个对象,但解包自动工作。有没有解决方法? (我知道这是一个编译错误...)Java:变量的捕捉异常可能没有被初始化

+0

你的问题没有意义。字段默认初始化为空(如果它们是引用类型的话);所以你不应该从你所描述的那里得到一个编译错误。 (变量可能未被初始化的编译错误只适用于本地变量和最终字段。)你能发布你的实际代码吗? – ruakh

+0

一个简单的例子: class test { \t public static void main(String args []){ \t \t Integer x; \t \t System.out.println(x); \t \t}} 类测试{ \t公共静态无效主要(字符串ARGS []){ \t \t整数x = NULL; \t \t System.out.println(x); \t \t}} 输出1:test.java:5:错误:变量x可能尚未初始化 \t \t的System.out.println(X); \t \t^ 1错误 输出2:空 – JAAAY

+0

我觉得他遇到了一个编译器错误,因为他的传球在参数(S)没有初始化,以及他试图绕过与一个try/catch是编译器错误。 – Jayson

回答

0

一种方法可能是在使用它之前检查它是否是类类型的实例。考虑以下几点:

Integer x = null; 
Integer y = new Integer(0); 

if(x instanceof Integer) 
    System.out.println("x is initialized."); 
else 
    System.out.println("x is NOT initialized."); 

if(y instanceof Integer) 
    System.out.println("y is initialized."); 
else 
    System.out.println("y is NOT initialized."); 

输出将导致:

X未初始化。

y被初始化。

0

你可以在该方法的外部范围内用dummy/temporary值初始化所有三个变量,然后用任何传入你方法的值来覆盖它们。例如:

Integer myVar1 = 0; 
Integer myVar2 = 0; 
Integer myVar3 = 0; 
public static void yourMethod(Integer var1, Integer var2, Integer var3) { 
    try { 
    myVar1 = var1; 
    myVar2 = var2; 
    myVar3 = var3; 
    ... your code 
    catch(NullPointerException ex) { 
    // handling error code 
    } 
} 
+0

除非需要唯一的引用,否则不要使用'new Integer()'。 – shmosel

+0

@Jayson但如何捕捉异常呢? – JAAAY

+0

您只需将代码包装在try catch中即可。如果这些变量没有在其他地方初始化,我认为你在混淆你期望的错误。如果它们没有被初始化,你会得到一个编译错误,但是如果你传递了一个null值,并且你正在尝试处理它,那么你将会遇到另一个错误,例如,一个空指针。所以你不能做像var1.intValue()这样的事情; – Jayson