Java学习之路(十):异常
---恢复内容开始---
异常的概述和分类
Throwable类是Java语言中所有错误或者异常的超类(也就是说,Java中所有的报错都是继承与Throwable的),也只有当对象是此类或者此类的子类的实例之一时,才能够通过Java虚拟机或者Javathrow语句进行抛出。
异常的继承体系:
- Throwable
- Error,服务器宕机,数据库崩溃等...
- Exception
- RuntimeException(运行期异常)
JVM默认是如何处理异常的?
main函数收到异常的时候,会有两种处理方式:
1.自己将该错误处理,让后继续执行代码
2.自己没有针对的处理方式,只有将其交给main的jvm来处理
JVM有一个默认的异常处理机制,就将该异常进行处理,并将该异常的名称、异常的信息、异常出现的位置打印在控制台上,同时程序停止运行。
自己处理异常的方式:
- try...catch...finaly...
- throws
我们使用try...catch...finally...来捕获异常,然后呢,可以继续执行我们的代码
但是呢,我们使用throw抛出异常的话就会结束程序了
catch(可以写多个错误类名){} 当然我们也可以是定义多个catch
Java中的异常被分为两大类
- 运行时异常
- 编译时异常
注意:所有的RuntimeException类及其子类的实例被称为运行是异常,其他异常就是编译时异常
编译是异常:
- 编译时异常必须显示处理,否则程序就会发生错误,无法通过编译
运行时异常:
- 无需显示处理,也可以像编译时异常一样进行处理
- 比如数组越界,空指针等都是运行时异常
Throwable的几种常见的方法
Exception是一个继承Throwable的子类
Throwable有几个常用的方法:
- getMJessage():获取异常信息,返回字符串
- toString():获取异常类名和异常信息,返回字符串
- printStackTrace():打印异常类名和异常信息,以及异常出现在程序的位置
throws的方式处理异常
- 定义功能方法时,需要把出现的问题暴露出来让调用这去处理
- 那么就通过throws在方法上标识
package null0801_2026;
public class Demo01 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Student std = new Student(11,"n1");
std.setAge(11);
}
}
class Student{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) throws Exception {
if(age>10){
throw new Exception("不能大于10");
}else{
this.age = age;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + "]";
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(int age, String name) {
super();
this.age = age;
this.name = name;
}
}
throw概述和throws的区别
throw的使用场景:
在方法内部出现某种情况,程序不能继续执行,就用throw把异常对象抛出
throws和throw的区别
thorws:
- 用在方法声明的后面,跟的是异常类名
- 可以跟多个异常类名,用逗号隔开
- 它表示抛出异常,由该方法的调用者来处理
thorw:
- 用在方法体内,跟的是异常对象名
- 只能抛出一个异常对象名,表示抛出异常
finally关键字的特点及应用
特点:
- finally的语句体一定会执行
- 特殊情况:在执行到finally之前退出了(System.exit(0))
finally我们一般用于IO流操作中的释放资源
finally,final,finalize之间的区别
1.final可以修饰类-表示不能被继承,可以修饰方法-表示不能被重写,修饰变量-表示只能赋值一次 2.finally是try语句中的一个语句体,不能单独使用,一般我们用作IO中的释放资源 3.finalize是一个方法,当垃圾回收器确定不存在对该对象的更多引用的时候,由对象的垃圾回收器调用此方法。
异常的注意事项以及如何使用异常处理
- 子类重写父类方法时,子类的方法必须抛出相同的父类异常
- 如果被重写的方法没有异常抛出,那么子类的方法最好不要抛出异常
- 如果子类方法内有异常发生,那么只能只能用try catch
原则:如果自己能处理的问题就自己解决(try...catch),如果不能解决,就throws
如何自定义一个异常?例子:
package null0801_2026;
public class AgeError extends RuntimeException{
public AgeError() {
super();
// TODO Auto-generated constructor stub
}
public AgeError(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
super(arg0, arg1, arg2, arg3);
// TODO Auto-generated constructor stub
}
public AgeError(String arg0, Throwable arg1) {
super(arg0, arg1);
// TODO Auto-generated constructor stub
}
public AgeError(String arg0) {
super(arg0);
// TODO Auto-generated constructor stub
}
public AgeError(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
}
Java学习之路(十):异常的更多相关文章
- Java学习之路(十二):IO流
IO流的概述及其分类 IO流用来处理设备之间的数据传输,Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流(读写数据) 输出流(写数据) 流按操作 ...
- Java学习之路(十二):IO流<二>
字符流 字符流是可以直接读写字符的IO流 使用字符流从文件中读取字符的时候,需要先读取到字节数据,让后在转换为字符 使用字符流向文件中写入字符时,需要把字符转为字节在写入文件 Reader和Write ...
- Java学习之路(十二):IO流<三>
复习:序列流 序列流可以把多个字节输入整合成一个,从序列流中读取到数据时,将从被整合的第一个流开始读取,读完这个后,然后开始读取第二个流,依次向后推. 详细见上一篇文章 ByteArrayOutput ...
- java学习之路之javaSE基础1
<h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...
- 新篇章之我的java学习之路下
昨天写下了人生的第一篇博客,今天接着写我的java学习之路有关开发及框架的学习过程. 想要学好java语言,只学习一些java的基本语法对实际开发中的用处还是不大的,所以我们还要掌握一些有关javaW ...
- java学习之路之javaSE基础2
java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...
- Java学习之路(转)
Java学习之路(书籍推荐) 一.基础类 1.<Thinking in java>(阅读2遍),入门第一位是建立正确的概念 2.<Core Java>这本书更贴近实践,更多 ...
- JAVA学习之路与大家分享
这是我四年以前总结的JAVA学习之路,希望对初学者或想从事JAVA开发的人有帮助. 本人是软件工程专业出身,先后学过C.C++.JAVA.VB.delphi等等开发语言以及网络相关管理技术.哎,好久不 ...
- Java 学习之路 -- day00
Java 学习之路 -- day00 Typora 快捷键操作 标题:#+空格 2. *斜体* 3. **加粗** 4. **斜体加粗*** 5. ~~删除线~~ 6. > 引用 7. ···分 ...
随机推荐
- json&pickle
用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进行转换Json模块提供了四个功能:dumps.du ...
- Unit Testing of Spring MVC Controllers1
我们的pom.xml文件相关的部分看起来如下: <dependency> <groupId>com.fasterxml.jackson.core</groupId& ...
- spring boot使用java读取配置文件,DateSource测试,BomCP测试,AnnotationConfigApplicationContext的DataSource注入
一.配置注解读取配置文件 (1)@PropertySource可以指定读取的配置文件,通过@Value注解获取值 实例: @PropertySource(val ...
- python编码(四)
一.预备知识 字符集 1, 常用字符集分类 ASCII及其扩展字符集作用:表语英语及西欧语言.位数:ASCII是用7位表示的,能表示128个字符:其扩展使用8位表示,表示256个字符.范围:ASCII ...
- Python是什么
Python是一种编程语言,它的名字来源于一个喜剧.也许最初设计Python这种语言的人并没有想到今天Python会在工业和科研上获得如此广泛的使用.著名的自由软件作者Eric Raymond在他的文 ...
- POJ2456 Aggressive cows 2017-05-11 17:54 38人阅读 评论(0) 收藏
Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13993 Accepted: 6775 ...
- POJ 2462 / HDU 1154 Cutting a Polygon
就这样莫名其妙的过了,不过可以确定之前都是被精度卡死了.真心受不了精度问题了. 题意:一条直线在一个不规则多边形内的长度,包括边重合部分. 首先计算出所有交点,然后按想x,y的大小进行二级排序. 然后 ...
- The Activities of September
- 好久不发帖,转一下公司技术美术独立完成的U3D模拟暗黑泰瑞尔翅膀物理运动效果
想入公司倍培养成为优秀的技术型美术,欢迎call我! Max制作翅膀模型部分 新建一个片面,模型给一些段数,赋予一张左右二方连续贴图. 加个FFD 4*4*4,并稍微拉出一点弧度. 将头尾的Alpha ...
- VS2010与Qt5.1.0的集成
早就听说qt可以集成到VS中,就是一直没尝试过.一直在使用qt creator,也没觉得它有什么不好.可最近VS用多了,我发现一个qt creator中很不好的毛病,就是代码自动完成时,creator ...