尝试抓住最后了解检查

时间:2015-01-27 20:20:54

标签: java

我发现这个主题非常混乱,想知道我是否可以得到一些反馈,看看我是否理解这个概念。

如果你这样做的话     int x ="这不是int" 当你试图运行它时,java会抱怨并抛出一个崩溃错误,在这种情况下"静态错误"。因此,如果 我想为此创建一个异常处理程序,它会是这样的吗?

try 
 {
  int x = "this is not an int"
 }catch(Staticerror nameIcanMakeUp){ 
  x = 4}
 finally{ 

是否必须在catch中将x设置为可接受的值以防止崩溃? catch的第一个参数是否必须与java崩溃时的说法相同? 如果在可能引发异常的代码之后我有更多代码,我是否将其余代码放在finally块中? 另外,如果我想定义一个例外,如果它是一个年龄领域而且我不希望人们从未来输入日期等,我将如何做到这一点?

1 个答案:

答案 0 :(得分:2)

  

如果您执行类似int x =“这不是int”的事情,那么java会抱怨

Java是一种静态类型语言,因此它在编译时会收到这些错误,而不是在运行程序时。

  

并在尝试运行时抛出崩溃错误

实际上javac编译器会给你错误。

  

我想为此创建一个异常处理程序,它会是这样的吗?

无法忽略在运行时无法编译的代码,因为您无法运行未编译的程序。

你能做的就是这样。

Object o = "This is not an Integer";
Integer i = (Integer) o;

这会编译并生成运行时而不是编译时错误。你可以用

来捕捉这个
Object o = "This is not an Integer";
try {
    Integer i = (Integer) o;
} catch(ClassCastException cce) {
    cce.printStackTrace();
}
  

是否必须在catch中将x设置为可接受的值以防止崩溃?

catch块中的代码也必须编译并运行而不抛出异常。

  

catch的第一个参数是否必须与java崩溃时的说法相同?

您尝试捕获的类必须是异常的类或超类。

  

我将其余代码放在finally块

这取决于,但通常你不需要一个finally块。

  

我应该在可能引发异常的代码之后有更多代码吗?

这取决于你想要做什么,但通常你尽可能少地放在这个区块里。

  

我也会如何做一个例外我想要定义,如果它是一个年龄字段,我不希望人们从未来输入日期等?

您可以通过扩展现有的自定义异常来创建自己的自定义异常,但我倾向于重复使用现有的异常,例如

if (age < 0)
    throw new IllegalArgumentException("Age cannot be negative");