我发现这个主题非常混乱,想知道我是否可以得到一些反馈,看看我是否理解这个概念。
如果你这样做的话 int x ="这不是int" 当你试图运行它时,java会抱怨并抛出一个崩溃错误,在这种情况下"静态错误"。因此,如果 我想为此创建一个异常处理程序,它会是这样的吗?
try
{
int x = "this is not an int"
}catch(Staticerror nameIcanMakeUp){
x = 4}
finally{
是否必须在catch中将x设置为可接受的值以防止崩溃? catch的第一个参数是否必须与java崩溃时的说法相同? 如果在可能引发异常的代码之后我有更多代码,我是否将其余代码放在finally块中? 另外,如果我想定义一个例外,如果它是一个年龄领域而且我不希望人们从未来输入日期等,我将如何做到这一点?
答案 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");