2

我有一个try-catch障碍;在里面try,我从控制台读取变量N并初始化一个Array[N]. 我需要Array稍后使用。如果我在try块外使用它,我会收到错误

java variable may not have been initialized.

我明白了,但我该怎么办,把整个程序写在try块里,真的吗?这种程序的可读性更差,我try在不可能的代码上使用exceptions。有解决方法吗?我尝试了一个boolean变量来检查是否存在异常并稍后在if语句中使用它 - 没有结果。

4

6 回答 6

11
Object[] yourArray = null;
try {
  ...
}
于 2013-07-01T07:52:43.690 回答
2

任何地方都可能出现异常,即使在不调用任何方法的行中也是如此。

您的问题是Java 已检查异常失败的又一个例子,尤其是对初学者而言:它们似乎迫使您编写 try-catch,甚至误导您认为这些是可能出现的唯一异常。

try-catch 块必须覆盖代码的精确区域,该区域必须以每行以上的所有内容正常完成为条件执行,并且共享相同的错误处理模式。这与已检查/未检查的异常完全无关。

因此,在不确切知道您的要求是什么的情况下,您无法获得有关在何处放置 try and catch 的具体建议。

于 2013-07-01T08:24:15.237 回答
0

块中声明的变量只能在该块中访问。您可以在 try 块之外定义数组,然后在 try 块中使用

String [] arr = null;
try{
  // assign value here
 }catch(Exception e){
}
于 2013-07-01T07:54:59.517 回答
0

如果 try...catch... 子句,您应该在外部声明变量

Integer n = null;
try{
    some code goes here
    .
    .
    .
catch(Exception e){
}

记得考虑变量范围。在 try catch 子句或方法中声明的变量或对象或进入 {} 的任何其他内容对类的其他部分不可见

希望这有帮助

于 2013-07-01T07:57:20.210 回答
0

你基本上有两个选择:

  1. try catch按照您的建议在块内编写代码
  2. 将您的数组初始化到块null之外try catch,然后检查您的数组是否没有null并且已经很好地初始化
于 2013-07-01T07:54:03.637 回答
0

如果您在 try 块中声明一个变量,(就此而言,在任何块中)它将是该特定块的本地变量,该变量的生命周期在该块执行后到期。因此,您不能访问在块之外声明的任何变量。

于 2021-05-21T18:36:26.347 回答