本次对java中的异常进行总结,介绍一些常用的异常,如何使用以及如何定义异常:以下代码可以直接粘贴到idea中运行,便于理解以及自己扩增新的内容;
第一篇:
package java_yichang;
//TODO 异常:java中异常分为两大类1.可以通过代码恢复正常逻辑执行的异常,称之为运行期异常;运行期异常编译器是不会告诉你的,直接改了代码就可以解决;RuntimeException,空指针异常和除数为0的算数异常和索引越界异常都是运行期异常,可以通过更改代码逻辑就可以解决;
// 2.不可以通过代码恢复正常逻辑执行的异常,称之为编译期异常:Exception
public class java_27 {
public static void main(String[] args) {
/*
异常处理语法:
捕捉多个异常的时候,先捕捉范围小的异常,然后再捕捉范围大的异常;
try{
可能出现异常的代码,
如果出现异常,JVM会对异常进行封装,形成一个具体的异常类,然后将这个异常抛出
所有的异常对象都可以被抛出
}catch(抛出的异常对象 对象引用){
异常的解决方案;
}catch{
}finally{
最终执行的代码逻辑;
}
*/
int i=0;
int j=0;
try{
j=10/i;
}catch(ArithmeticException e){
e.getMessage();//错误信息
e.getCause();//错误原因
e.printStackTrace();
}finally{
System.out.println("最终执行的代码:出现了异常");
}
//以上这个错误完全可以通过ifelse进行判断然后躲避,逻辑上确实不会为空,但是万一为空之后,用if-else躲避了,但是以后要是用到了会出现问题,所以要尽可能早的发现问题然后进行更改,所以就用到了try-catch
}
}
第二篇:
package java_yichang;
//TODO 异常:
public class java_28 {
public static void main(String[] args)throws Exception {
int i=10;
int j=0;
User one=new User();
try{
one.test(i,j);
}catch(Exception e){
e.printStackTrace();//可以看到,报错的是Exception,不是之前报的算数异常了;
System.out.println("对异常进行处理");
}
//下面抛出异常了,这里就要进行处理,可以加上try-catch或者这里可以不进行处理,谁调用这个函数就要处理,
// 可以在main方法后面抛出异常,就算是这两处都不做处理,也不会报错,因为这个是运行期异常,如果出现异常
// 编译器不会提醒你,也就是不会飘红,将代码改了就可以解决,但是一般是抛出一个异常来进行处理,这个时候
// 就不能抛出运行期异常了,需要将异常转化一下,在下方加上try-catch;这个时候在下方方法加上try-catch后,
// 手动抛出了异常,这个时候如果不做处理就会飘红,编译器就会提醒做出操作;这时候要么main函数后面抛出异常来解决,
// 要么堆one.test(i,j)加try catch解决
}
}
class User{
//如果方法中可能出现问题,那么需要提前声明,告诉其他人,我的方法肯能会出现问题;
//此时需要使用关键字throws
//如果程序中需要手动抛出异常,用throw关键字;然后new出异常对象;
public void test(int i,int j)throws Exception{
try{
System.out.println(i/j);
}catch(Exception e){
throw new Exception("除数为零");//此处要与test方法后面throws的异常要匹配;
}
}
}
第三篇:
package java_yichang;
import javax.security.auth.login.AccountException;
//TODO 自定义异常:
public class java_29 {
public static void main(String[] args){
String account="zhangsan";
String password="123123";
try{
login(account,password);//这个地方要进行处理,加上try-catch,下面已经抛出异常了,如果不进行处理的话,程序就会崩溃;
}catch(accountException e1){
System.out.println("账号不正确,需要重新修正!");
}catch(passwordException e2){
System.out.println("密码不正确,需要重新修正!");
}catch (loginException e3){
System.out.println("其他登录的相关错误!");
}
}
public static void login(String account,String password){//如果下面loginException没有继承RuntimeException的话,改成继承Exception的话,这里就需要抛出具体编译器异常,因为运行期异常不需要处理,但是编译器异常必须处理,飘红了,和28一样,此处需要加上throws accountException,passwordException;
if(!"account".equals(account)){//此处不加!的话就是代表两个相等的时候执行,加上之后代表不相等的时候执行if条件语句
throw new accountException("账号不正确!");
}
if(!"password".equals(password)){
throw new passwordException("密码不正确!");
}
System.out.println("登陆成功!");
}
}
class accountException extends loginException{
public accountException(String message){
super(message);
}
}
class passwordException extends loginException{
public passwordException(String message){
super(message);
}
}
class loginException extends RuntimeException{
public loginException(String message){
super(message);
}
}