Java 异常
执行Java代码时,可能会发生各种错误: 程序员写代码时犯的错误、用户非法输入造成的错误,或其他不可预见的错误。
当发生错误时,Java通常会停止程序运行,并生成错误消息。用技术方面的话说: Java将抛出异常/exception(抛出错误)。
Java try catch
try
语句可以对一个代码块,在其执行时,进行错误检测。
catch
语句定义了,当try块中发生错误时,要执行的代码块,。
try
与 catch
关键字成对出现:
语法
try {
// 要尝试的代码块
}
catch(Exception e) {
// 处理错误的代码块
}
考虑下面例子
这将生成一个错误,因为myNumbers[10]
不存在。
public class MyClass {
public static void main(String[ ] args) {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]); // error!
}
}
输出:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at MyClass.main(MyClass.java:4)
如果发生错误,可以用try…catch
捕捉错误,然后执行错误处理代码:
示例
public class MyClass {
public static void main(String[ ] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]);
} catch (Exception e) {
System.out.println("出错了");
}
}
}
输出
出错了
Finally
不管try
块中有没有报错,在try...catch
之后,finally
语句中的代码块将总是会执行:
示例
public class MyClass {
public static void main(String[] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]);
} catch (Exception e) {
System.out.println("出错了");
} finally {
System.out.println("'try catch'结束了");
}
}
}
输出将为:
出错了
'try catch'结束了
throw 关键字
throw
语句让你可以创建自定义错误。
throw
语句与异常类型一起使用。Java中有很多异常类型: ArithmeticException
, ClassNotFoundException
, ArrayIndexOutOfBoundsException
, SecurityException
, 等等.
异常类型通常与自定义方法一起使用。如果不理解下面的例子,不必担心,下一章中会了解更多。
示例
如果年龄小于18岁,抛出异常(打印“拒绝访问”);如年龄在18岁或以上,打印“允许访问”:
public class MyClass {
static void checkAge(int age) {
if (age < 18) {
throw new ArithmeticException("拒绝访问 - 低于18岁");
}
else {
System.out.println("允许访问 - 年龄合格");
}
}
public static void main(String[] args) {
checkAge(15); // 年龄设置为15 (低于18...)
}
}
输出将为:
Exception in thread "main" java.lang.ArithmeticException: 拒绝访问 - 低于18岁
at MyClass.checkAge(MyClass.java:4)
at MyClass.main(MyClass.java:12)
如果你的年龄是20岁,你不会有例外:
示例
checkAge(20);
输出将为:
允许访问 - 年龄合格