Java异常处理
1.捕获和处理异常
在java中,我们一般用try-catch来捕获异常
public class ExceptionDemo {
/*public static void main(String[] args) {
String str="123";
int a=Integer.parseInt(str);
System.out.println(a);
}*/
/*public static void main(String[] args) {
String str="123a";
int a=Integer.parseInt(str);
System.out.println(a);
}*/
public static void main(String[] args) {
String str="123a";
try{
int a=Integer.parseInt(str);
}catch(NumberFormatException e){
e.printStackTrace();
}
System.out.println("继续执行");
}
}
public static void testFinally(){
String str="123a";
try{
int a=Integer.parseInt(str);
System.out.println(a);
}catch(Exception e){
e.printStackTrace();
System.out.println("exception");
return;
}finally{
System.out.println("finally end");
}
System.out.println("end");
}
public static void main(String[] args) {
testFinally();
}
finally里面的都会执行 但是try catch后面的代码未必会执行
2.throws和throw关键字
throws表示当前方法不处理异常,而是交给方法的调用出去处理;
/**
* 把异常向外面抛
* @throws NumberFormatException
*/
public static void testThrows()throws NumberFormatException{
String str="123a";
int a=Integer.parseInt(str);
System.out.println(a);
}
public static void main(String[] args) {
try{
testThrows();
System.out.println("here");
}catch(Exception e){
System.out.println("我们在这里处理异常");
e.printStackTrace();
}
System.out.println("I'm here");
}
而throw表示直接抛出一个异常
public static void testThrow(int a) throws Exception{
if(a==1){
// 直接抛出一个异常类
throw new Exception("有异常");
}
System.out.println(a);
}
public static void main(String[] args) {
try {
testThrow(1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
三丶Exception 和 RuntimeException的区别
/**
* 运行时异常,编译时不检查,可以不使用try...catch捕获
* @throws RuntimeException
*/
public static void testRuntimeException()throws RuntimeException{
throw new RuntimeException("运行时异常");
}
/**
* Exception异常,编译时会检查,必须使用try...catch捕获
* @throws Exception
*/
public static void testException()throws Exception{
throw new Exception("Exception异常");
}
public static void main(String[] args) {
try {
testException();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
testRuntimeException();
}
四丶自定义异常
自定义异常要继承自Exception
public class CustomException extends Exception{
public CustomException(String message) {
super(message);
}
}
public class TestCustomException {
public static void test()throws CustomException{
throw new CustomException("自定义异常");
}
public static void main(String[] args) {
try {
test();
} catch (CustomException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的