try{
//有可能出现异常的语句
}catch(Exception e){ //匹配异常类型
//编写异常的处理语句
System.out.println(e); //一般写法
e.printStackTrace() //打印信息
}catch()...//多个catch()
finally{
//一定会运行的代码
}
Throwable的子类Exception、Error
Exception:一般表示程序中出的问题,可以直接用try...catch处理 //一般都用这个来捕获错误
Error:一般指的是JVM错误,程序中无法处理(JVM就是java虚拟机);
- throws和throw
- throws:
class ListSetMap {
public static void main(String[] args) {
//要调用此方法就必须处理
try{
fun();
}catch(Exception e){
System.out.println(e);
}
}
public static void fun() throws Exception{ //下面不用处理异常
System.out.println(1/0);
}
}
输出
java.lang.ArithmeticException: / by zero
2.throw
class ListSetMap {
public static void main(String[] args) {
try{
throw new Exception("自己抛出的异常"); //直接抛出异常
}catch(Exception e){
System.out.println(e);
}
}
}
注意:throw 一般都不会单独使用
- 自定义异常类
class MyException extends Exception{
public MyException(String msg){
super(msg); //调用父类构造方法
}
}
class ListSetMap { public static void main(String[] args) { try{ throw new MyException("自定义异常"); //对象 }catch(Exception e){ System.out.println(e); } } }
输出
MyException: 自定义异常
- 断言
- assert boolean表达式;
class ListSetMap {
public static void main(String[] args) {
int x[]={1,2,3};
assert x.length==0:"数组长度不为0"; //"是打印错误的信息
}
}
肯定x的长度为0,输出为
Exception in thread "main" java.lang.AssertionError: 数组长度不为0
at ListSetMap.main(ListSetMap.java:4)
注意:断言返回的虽然是boolean值,但是不能作为条件判断
一般开发并不提倡用断言