廖雪峰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 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...
随机推荐
- 【HDOJ1384】【差分约束+SPFA】
http://acm.hdu.edu.cn/showproblem.php?pid=1384 Intervals Time Limit: 10000/5000 MS (Java/Others) ...
- python:代码复用与函数递归
#recursion.py:打印斐波那契数列 def fact(n): if n==1 or n==2: return 1 else: return fact(n-1)+fact(n-2) while ...
- 使用JQuery反向选择checkbox
HTML代码: <input id="haspda" type="checkbox" name="haspda" value=&quo ...
- mysql深入
使用存储过程 create procedure productpricing() begin select avg(prod_price) as priceaverage from products; ...
- TECH books
文章目录 TECH books linux vxworks bat c gdb c++ vbscript make java bash perl web uml software-misc cpu e ...
- Gravitational Teleport 开源的通过ssh && kubernetes api 管理linux 服务器集群的网关
Gravitational Teleport 是一个开源的通过ssh && kubernetes api 管理linux 服务器集群的网关 支持以下功能: 基于证书的身份认证 ssh ...
- vm centos7中用NAT模式配置上网
第一步:设置虚拟机的NAT相关网络设置: 点击5标致处的“NAT设置”会出现设置6标致处的网关. 第二部:设置操作系统网络设置,右击上图中9标致处的系统,点击设置 第三部:配置操作系统ip ...
- wpf揭秘
2.4属性元素 以下c#和xaml是一致的 Rectangle r = new Rectangle(); r.Width = 40; r.Height = 40; r.Fill = Brushes.B ...
- [转]AJAX 简介
AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 您应当具备的基础知识 在继续学习之前,您需要对下面的知识有基本的了解: HTML / XHTML CSS JavaScript ...
- mysql之 myloader原理介绍
myloader恢复主要流程 1.首先由myloader主线程完成建库建表,依次将备份目录下建库和建表文件执行应用到目标数据库实例中: 2.接着myloader主线程会生成多个工作线程,由这些 ...