异常(Exceptation)
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)相关推荐
- Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常
kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...
- JS Uncaught SyntaxError:Unexpected identifier异常报错原因及其解决方法
最近在写ajax的时候,调用js方法,遇到了Uncaught SyntaxError:Unexpected identifier异常报错,开始搞不清原因,很苦恼. 以为是js方法参数个数和长度的问题, ...
- JVM 常见异常及内存诊断
栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存. 栈帧过多导致栈内存溢出 下述示例代码,由于递归 ...
- java通过异常处理错误,java基础之通过错误处理异常
我们在编程过程中,通常需要时刻关注可能遇到的问题,此时可以把问题分为两类:普通问题与异常问题.普通问题:我们可以通过从当前环境中获取到的信息来解决这个问题:而异常问题:在当前环境中获取到的信息并不能解 ...
- Ajax接收Java异常_java – 处理来自Servlet的Jquery AJAX响应中的异常
我的servlet代码是 try{ //something response.setStatus(201); out.print("Data successfully saved" ...
- 消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法
消除安卓SDK更新时的"https://dl-ssl.google.com refused"异常的方法 消除安卓SDK更新时的"https://dl-ssl.google ...
- java 捕获异常并存入数据库_java异常处理,报异常的话怎么处理对象值,并持久化到数据库中...
展开全部 //没看到有人回e68a843231313335323631343130323136353331333365646233答你,我还没学到框架,不知道那个是不是可以很便捷操作你说的这样过程 / ...
- python异常机制
python异常处理机制 1.1python的内置异常 当我们在运行代码的时候一旦程序报错,就会终止运行,并且有的异常是不可避免的,但是我们可以对异常进行捕获,防止程序终止. python的内置异常是 ...
- Bad credentials异常
在spring-security中出现Bad credentials异常,可能是如下情况: 一.username和password错误 二.访问权限不够 三.密码加密问题,对于密码加密问题可能是如下情 ...
最新文章
- 想要高效在线办公,建议你“百度如流”一下:项目管理、协作文档都来了,还有AI翻译和速记等黑科技...
- 文件管理服务器主机,通过BlueHost主机文件管理器上传文件
- 听说你想去大厂看妹子,带你看看字节跳动实习算法岗面试长啥样?
- 《系统集成项目管理工程师》必背100个知识点-57沟通管理
- 【Spring学习】spring开发包介绍
- Linux基础命令---comm
- Siamese网络(孪生神经网络)详解
- Js slice()方法和splice()方法
- twisted 安装时,安装顺序为 zope.interface -twisted
- oracle数据库dca,有关Oracle数据库
- jenkins-邮件通知
- 12 经络的走向图和说明
- k8s 拉取镜像失败_k8s 无法拉取阿里云仓库镜像
- java宠物商店管理系统_Java实现宠物商店管理系统
- VisualStudio 2019 新特性
- 100本《架构师》迷你书——限时免费领取
- Delphi变成小技巧——直接将excel当做表来显示
- 多表查询(连接查询)
- Web端测试——F12的代码调试与抓包
- HTTP编程(Java爬虫-简单爬取网页数据)