2.1介绍

java语言中将程序执行过程中发生的不正常情况称为异常,语法错误和逻辑错误不是异常

1)Error(错误),java虚拟机无法解决的严重问题,如:jam系统内部错误,资源耗尽

2)Exception:因编译错误或偶然的外在因素导致的一般性问题,可以用针对代码进行处理,如空指针访问等。

2.2异常体系图

异常分为两大类,运行时异常和编译时异常

运行时异常编译器检查不出来,一般是编程逻辑错误,运行时异常可以不做处理,编译时异常是编译器要求必须处置的异常

2.3常见的运行时异常

2.3.1NullPointerException

​ 空指针异常,当程序试图在需要对象的地方使用null,抛出该异常

String name = null;
sout(name.length());  //运行抛出空指针异常

2.3.2ArithmeticException

​ 数学运算异常,当出现异常的运算条件时,抛出此异常

int a = 10;
int b = 0;
int c = a/b; //被除数不能为0,抛出数学运算异常

2.3.3ArrayIndexOutOfBoundsException

​ 数组下标越界异常,用非法索引访问数组时抛出的异常

int[] arr = {1,2,4};
sout(arr[3]); //索引为3的数组没有元素,抛出数组下标越界异常

2.3.4ClassCastException

​ 类型转换异常,当试图将对象强制转换为不是实例的子类时,抛出该异常

class A{ }
class B extends A{  }
class C extends A{  }
A a = new B();
B b = (B)a;
C c = (C)a;
//实际运行类型为B类,与C类无关,不能转换为C类,抛出类型转换异常

2.3.5NumberFormatException

​ 数字格式不正确异常,当程序试图将字符串转换为一种数值类型,但该字符串不能转换为适当格式,抛出该异常

String name = "张三";
int num = Integer.parseInt(name);
//不能将字符串“张三”转换为整数,抛出数字格式不正确异常

2.4异常处理

2.4.1try-catch异常处理

​ java提供try和catch块来处理异常,try包含可能出现错误的代码。catch用于处理块中发生的异常,没有finally语法也可以通过

//语法格式举例,快捷键 Crtl Alt + t
int num1 = 10;
int num2 = 0;
try{int res = num1/num2;
}catch(Exception e){sout(e.getMessage());
}

​ 细节

1.如果异常发生了则异常发生后面的代码不会再执行,直接进入catch块

2.如果异常没有发生,则顺序执行try的代码块,不会进入catch

3.如果希望不管是否发生异常,都执行某段代码,则在后面加上finally{}

4.可以有多个catch语句捕获不同的异常,要求父类异常在后,子类异常在前

try{ Person person = new Person();person = null;sout(person.name);int num1 = 10;int num2 = 0;int res = num1/num2;
}catch(NullPointerException e){  //捕获空指针异常sout(e.getMessage());
}catch(ArithMeticException e){  //捕获数学运算异常sout(e.getMessage());
}catch(Exception e){    //父类异常,捕获全部异常,写在子类异常之后sout(e.getMessage());
}finally{sout("hahaha");
}

5.可以进行try-finall配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉,应用场景就是执行一段代码,不管是否发生异常,都必须执行某个业务逻辑

try{int num1 = 10;int num2 = 0;
}finally{sout(“执行了finally”;) //输出这句话,程序报错终止
}sout(“程序继续执行”);

2.4.2throws异常处理

​ 如果一个方法可能生成某种异常,但不能确定如何处理,则应显示德声明抛出异常,表示该方法不处理,交给方法的调用者处理

​ 在方法声明中用throws语句可以抛出异常列表,throws后面的异常可以是产生的类型异常,也可以是他的父类

public void f2() throws NullPointerException{//声明抛出异常
}
public void f2() throws NullPointerException,ClassCastException{//声明抛出异常列表
}
public void f2() throws Exception{//声明抛出所有异常
}

​ 对于运行时异常,程序员没有处理,默认就是throws的方式处理

public void f1(){  //在这里默认会有一个throws的异常处理方式int num = 10int num1 = 20;
i   nt res = num/num1;
}

​ 子类重写父类方法时,所抛出的异常类型要么和父类抛出的异常类型一致,要么为父类抛出异常类型的子类,不能扩大其范围

​ 在throws过程中,如果方法有try-catch,就相当于处理异常,不用再throws

2.5自定义异常

​ 当程序中出现某些错误,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该信息

步骤

​ 自定义异常类名,继承Exception或RunTimeException,一般继承RunTimeException,运行时异常

public class CustomException {public static void main(String[] args) {int age = 20;if (!(age >= 18 && age <= 120)){throw new AgeException("年龄应该在18-120之间");}System.out.println("你的年龄范围正确");}
}
class AgeException extends RuntimeException{public AgeException(String message) {super(message);}
}

2.6throw和throws的区别

异常(Exceptation)相关推荐

  1. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  2. JS Uncaught SyntaxError:Unexpected identifier异常报错原因及其解决方法

    最近在写ajax的时候,调用js方法,遇到了Uncaught SyntaxError:Unexpected identifier异常报错,开始搞不清原因,很苦恼. 以为是js方法参数个数和长度的问题, ...

  3. JVM 常见异常及内存诊断

    栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存. 栈帧过多导致栈内存溢出 下述示例代码,由于递归 ...

  4. java通过异常处理错误,java基础之通过错误处理异常

    我们在编程过程中,通常需要时刻关注可能遇到的问题,此时可以把问题分为两类:普通问题与异常问题.普通问题:我们可以通过从当前环境中获取到的信息来解决这个问题:而异常问题:在当前环境中获取到的信息并不能解 ...

  5. Ajax接收Java异常_java – 处理来自Servlet的Jquery AJAX响应中的异常

    我的servlet代码是 try{ //something response.setStatus(201); out.print("Data successfully saved" ...

  6. 消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

    消除安卓SDK更新时的"https://dl-ssl.google.com refused"异常的方法 消除安卓SDK更新时的"https://dl-ssl.google ...

  7. java 捕获异常并存入数据库_java异常处理,报异常的话怎么处理对象值,并持久化到数据库中...

    展开全部 //没看到有人回e68a843231313335323631343130323136353331333365646233答你,我还没学到框架,不知道那个是不是可以很便捷操作你说的这样过程 / ...

  8. python异常机制

    python异常处理机制 1.1python的内置异常 当我们在运行代码的时候一旦程序报错,就会终止运行,并且有的异常是不可避免的,但是我们可以对异常进行捕获,防止程序终止. python的内置异常是 ...

  9. Bad credentials异常

    在spring-security中出现Bad credentials异常,可能是如下情况: 一.username和password错误 二.访问权限不够 三.密码加密问题,对于密码加密问题可能是如下情 ...

最新文章

  1. 想要高效在线办公,建议你“百度如流”一下:项目管理、协作文档都来了,还有AI翻译和速记等黑科技...
  2. 文件管理服务器主机,通过BlueHost主机文件管理器上传文件
  3. 听说你想去大厂看妹子,带你看看字节跳动实习算法岗面试长啥样?
  4. 《系统集成项目管理工程师》必背100个知识点-57沟通管理
  5. 【Spring学习】spring开发包介绍
  6. Linux基础命令---comm
  7. Siamese网络(孪生神经网络)详解
  8. Js slice()方法和splice()方法
  9. twisted 安装时,安装顺序为 zope.interface -twisted
  10. oracle数据库dca,有关Oracle数据库
  11. jenkins-邮件通知
  12. 12 经络的走向图和说明
  13. k8s 拉取镜像失败_k8s 无法拉取阿里云仓库镜像
  14. java宠物商店管理系统_Java实现宠物商店管理系统
  15. VisualStudio 2019 新特性
  16. 100本《架构师》迷你书——限时免费领取
  17. Delphi变成小技巧——直接将excel当做表来显示
  18. 多表查询(连接查询)
  19. Web端测试——F12的代码调试与抓包
  20. HTTP编程(Java爬虫-简单爬取网页数据)

热门文章

  1. Jmeter Kafka插件开发之Sampler篇
  2. Kafka多个消费者监听消费同一个Topic主题
  3. 神经网络编程的34个案例,java调用神经网络模型
  4. Z 字形变换(java版)
  5. 中国峰会速递|亚马逊云科技【DEV DAY】认知地图正式发布!
  6. “第一股”争夺战:每日优鲜、叮咚买菜及美菜网谁能杀出重围?
  7. go 字符串分割数组
  8. 密码学入门(3):分组密码的模式
  9. 操作系统实验Ucore lab8+反馈队列
  10. 【Unity】创建一个自己的可交互AR安卓程序