日期:2014-05-20  浏览次数:20618 次

我的一个方法要返回一个String[][] ,但是变量String[][] MyInvokeStr 的实例化在try里面,并且MyInvokeStr 值也是在try里面写入的。我如
我的一个方法要返回一个String[][]   ,但是变量String[][]   MyInvokeStr   的实例化在try里面,并且MyInvokeStr   值也是在try里面写入的。我如何来返回这个MyInvokeStr   呢?它编译的时候老是报错:没有实例化。
代码如下:

public   String[][]     MyInvokeService(String   ServiceType){
String   MyInvokeStr[][];
try   {        
...
MyInvokeStr   =   new   String[r][c];
                ...
}  
catch   (Exception   ex)   {         ex.printStackTrace();         }
return   MyInvokeStr;
}

------解决方案--------------------
对于数组的初始化
String MyInvokeStr[][] = null;
你也可以像下面这样:
String MyInvokeStr[][] = new String[0][0];

看你自己的喜好了,两者没有什么区别,
只是在你引用该方法获取返回数组后
上面的方法要判断是否为null
下面的则不需要。
------解决方案--------------------
如果你的代码在
MyInvokeStr = new String[r][c];
这一句时或者之前抛出异常,则MyInvokerStr没有赋值。
因此编译return MyInvokerStr的时候检测到变量MyInvokerStr可能没赋值。
只需要在申明MyInvokerStr的时候初始化一下就好:
String MyInvokeStr[][] = null;

------解决方案--------------------
若生成的是一个基本数据类型的数组,则java默认将数组中的每个元素设为0(若为boolean型,则设为false),若声明的是一个对象数组,必须为obj的每个元素赋值,初始化进程才算完成。
所以String MyInvokeStr[][] = null;即可
------解决方案--------------------
局部变量申明的时候不做初始化
不赋值会引起编译错误,不管是对于基本类型还是对象类型

推荐代码
try
{
String[][] MyInvokeStr = new String[r][c];
return MyInvokeStr;
}
catch(Exception ex)
{
return null;
}