廖雪峰Java3异常处理-1错误处理-1Java的异常
1.计算机运行中的错误
在计算机程序运行的过程中,错误总会出现,不可避免的
- 用户输入错误
- 读写文件错误
- 网络错误、内存耗尽、无法连接打印机不可
String s = "abc";
int n = Integer.parseInt(s);
# 2.Java异常
Java使用异常来表示错误:
* 异常是class,本身带有类型信息
* 异常可以在任何地方抛出
* 异常只需要在上层捕获,和方法调用分离
2.1Java的异常体系
Exception分为两类:RuntimeException和非RuntimeException
必须捕获的异常:Exception及其子类,但不包括RuntimeException及其子类,称为Checked Exception,即非RuntimeException
不需要捕获的异常:Error及其子类、RuntimeException及其子类
原因:
* Error是发生了严重错误,程序对此一般无能为力:如
* OutOfMemoryError,NoClassDefFoundError,StackOverflowError...
- Exception是发生了运行时逻辑错误,应该捕获异常并处理:
* 有些错误是可以预期可能出现的,如IOException,NumberFormatException...,此时应该捕获并处理这些错误
* 有些错误是程序存在bug导致的,如NullPointException,IndexOutOfBoundsException...,此时是程序本身有问题,应该修复程序
3捕获异常
Java程序中
- 用try{...}catch(){...}捕获异常
- 可能发生异常的语句放在try{...}中
- 使用catch捕获对应的Exception及其子类
import java.io.*;
import java.lang.String;
public class Main {
public static void main(String[] args) {
test("UTF-8");
test("ABC");
}
static void test(String encoding){
try{
"test".getBytes(encoding);
System.out.println("OK.");
}catch (UnsupportedEncodingException e){
System.out.println("failed");
System.out.println(e);
}
}
}
# 4.申明异常
针对可能抛出Checked Exception的方法
* 捕获Exception并处理
* 不捕获但通过throws声明
* 通过throws声明仍需在上层捕获
* main()是最后捕获Exception的机会。如果一个异常在main方法没有捕获到,JVM会报错并且退出。
```#java
import java.io.*;
import java.lang.String;
public class Main {
public static void main(String[] args) throws UnsupportedEncodingException{
test("UTF-8");
test("ABC");
}
static void test(String encoding) throws UnsupportedEncodingException{
"test".getBytes(encoding);
System.out.println("OK.");
}
}
<img src="https://img2018.cnblogs.com/blog/1418970/201901/1418970-20190128215638621-598124900.png" width="500" />
# 5.总结:
* Java使用异常来表示错误,并通过try{...} catch {...}捕获异常
* Java的异常是class,并且从Throwable继承
* Error是无需捕获的严重错误
* Exception是应该捕获的可处理的错误
* RuntimeException无需强制捕获,非RuntimeException(CheckedException)需强制捕获,或者用throws声明。
廖雪峰Java3异常处理-1错误处理-1Java的异常的更多相关文章
- 廖雪峰Java3异常处理-1错误处理-3抛出异常
1.异常的传播 当某个方法抛出异常时: 如果当前方法没有捕获,异常就被抛到上层调用方法 直到遇到某个try...catch被捕获 使用printStackTrace()打印处方法的调用栈 import ...
- 廖雪峰Java3异常处理-1错误处理-2捕获异常
1捕获异常 1.1 finally语句保证有无错误都会执行 try{...}catch (){...}finally{...} 使用try...catch捕获异常 可能发生异常的语句放在try{... ...
- 廖雪峰Java3异常处理-1错误处理-4自定义异常
JDK已有的异常: RuntimeException * NullPointerException * IndexOutOfBoundsException * SecurityException * ...
- 廖雪峰Java3异常处理-2断言和日志-3使用Commons Logging
Commons Logging是Apache创建的日志模块: 可以挂接不同的日志系统 可以通过配置文件指定挂接的日志系统 自动搜索并使用Log4j 如果Log4j不存在,使用JDK Logging(J ...
- 廖雪峰Java3异常处理-2断言和日志-1使用断言
1.断言 断言Assertion是一种程序调试方式 使用assert关键字 断言条件预期为true 如果断言失败,抛出AssertionError,停止程序 可选的断言消息,断言失败,就会抛出 pub ...
- 廖雪峰Java3异常处理-2断言和日志-4使用Log4j
1.Log4j Log4j是目前最流行的日志框架.有两个版本 1.x:Log4j 2.x:Log4j2 Log4j下载地址https://www.apache.org/dyn/closer.lua/l ...
- 廖雪峰Java3异常处理-2断言和日志-2使用JDK Logging
1.日志 为了取代System.out.println() 可以设置输出样式 可以设置输出级别,禁止某些级别输出 可以被重定向到文件 可以按包名控制日志级别 2.JDK内置Logging 在java. ...
- 廖雪峰Java-3流程控制-7for循环
for循环 for循环使用计数器实现循环 for循环条件需要设置:计数器初始值:循环前检测条件:每次循环后如何更新计数器 计数器变量通常命名为i int[] ns = {1,4,9,16,25}; f ...
- 爬虫:把廖雪峰的教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...
随机推荐
- Codeforces Div3 #498 A-F
. A. Adjacent Replacement ...
- 通过阻止 touchstart 事件,解决移动端的 BUG
在 iOS10 下,即使设置了 meta 标签的 user-scalable=no 依然不能阻止用户缩放. 解决此 BUG 的方法是阻止 PC 事件: document.addEventListene ...
- C++中的类模板
一.学习笔记 1.类模板的格式(1)声明 template<typename T> /* 使用T表示某种类型,比如: */ class AAA { private: T obj; publ ...
- 现在的企业用到的Java开发主流框架有哪些
虽然Java一直被唱衰,但是直到现在Java软件开发也坚持霸主地位不动摇.毫无疑问,Java是目前最热门的编程语言之一.随着Java面向对象语言的流行以及多层架构应用的出现,使得应用程序的可复用性得到 ...
- awesome-workflow-engines
转自:https://github.com/meirwah/awesome-workflow-engines awesome-workflow-engines A curated list of aw ...
- chrome浏览器好用的插件
1.Chrome批量保存所有选项卡网址 + 批量打开复制网址小插件 批量保存所有选项卡网址插件:Copy All Urls 经常搜索一些东西,下班时无法处理完所有网页内容,比如做笔记什么的,又不舍得关 ...
- 原生JavaScript实现跨域
为什么需要跨域呢?这是因为我们一般的请求都是使用xhr的,但是它只能调用同一个域里面的接口,有时候,我们想要在自己的站点中调用其他站点的接口,这时候就要用到跨域了.其实,跨域并不难,我们可以通过Jav ...
- MySQL 遇到错误集锦
MySQL 规定:varchar必须指定长度,否则报错:ERROR 1064 (42000) 只有一列时,primary key 直接写在这一列的后面: 没有定义主键时,提示错误:ERROR 1075 ...
- learnopengl“入门”的全部代码
projection 里的角度,角度越大,物体离摄像机越远:角度越小,物体离摄像机越近,这个角度表示视野(fov),视野越大,看到的物体就越小 头文件 #ifndef SHADER_H_INCLUDE ...
- MySQL+MyBatis下批量修改数据的问题
今天处理数据批量的更新,场景是这样子的,web站管理的字典功能,需要添加一个记录的整体描述,以及详细内容的描述.一个字典整体概述只有一组信息,但是其详细内容,会有很多项,不确定. 这个场景,在关系型数 ...