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的异常的更多相关文章

  1. 廖雪峰Java3异常处理-1错误处理-3抛出异常

    1.异常的传播 当某个方法抛出异常时: 如果当前方法没有捕获,异常就被抛到上层调用方法 直到遇到某个try...catch被捕获 使用printStackTrace()打印处方法的调用栈 import ...

  2. 廖雪峰Java3异常处理-1错误处理-2捕获异常

    1捕获异常 1.1 finally语句保证有无错误都会执行 try{...}catch (){...}finally{...} 使用try...catch捕获异常 可能发生异常的语句放在try{... ...

  3. 廖雪峰Java3异常处理-1错误处理-4自定义异常

    JDK已有的异常: RuntimeException * NullPointerException * IndexOutOfBoundsException * SecurityException * ...

  4. 廖雪峰Java3异常处理-2断言和日志-3使用Commons Logging

    Commons Logging是Apache创建的日志模块: 可以挂接不同的日志系统 可以通过配置文件指定挂接的日志系统 自动搜索并使用Log4j 如果Log4j不存在,使用JDK Logging(J ...

  5. 廖雪峰Java3异常处理-2断言和日志-1使用断言

    1.断言 断言Assertion是一种程序调试方式 使用assert关键字 断言条件预期为true 如果断言失败,抛出AssertionError,停止程序 可选的断言消息,断言失败,就会抛出 pub ...

  6. 廖雪峰Java3异常处理-2断言和日志-4使用Log4j

    1.Log4j Log4j是目前最流行的日志框架.有两个版本 1.x:Log4j 2.x:Log4j2 Log4j下载地址https://www.apache.org/dyn/closer.lua/l ...

  7. 廖雪峰Java3异常处理-2断言和日志-2使用JDK Logging

    1.日志 为了取代System.out.println() 可以设置输出样式 可以设置输出级别,禁止某些级别输出 可以被重定向到文件 可以按包名控制日志级别 2.JDK内置Logging 在java. ...

  8. 廖雪峰Java-3流程控制-7for循环

    for循环 for循环使用计数器实现循环 for循环条件需要设置:计数器初始值:循环前检测条件:每次循环后如何更新计数器 计数器变量通常命名为i int[] ns = {1,4,9,16,25}; f ...

  9. 爬虫:把廖雪峰的教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...

随机推荐

  1. Spring Boot 揭秘

    SpringBoot基础 微服务 解决大一统的服务化架构的问题 代码冲突问题 交付复杂,影响面大 测试困难 微服务的好处 可扩展性 隔离性 灵活性,多语言多技术生态 微服务的挑战 保持微服务的互通性 ...

  2. hdu4965 Fast Matrix Calculation 矩阵快速幂

    One day, Alice and Bob felt bored again, Bob knows Alice is a girl who loves math and is just learni ...

  3. Makefile introduction (very old presentation)

  4. Java之SimpleDateFormat日期格式转换(Date 和 String 类型之间的转换)

    SimpleDateFormat : 可以选择任何用户定义的日期-时间格式的模式    "yyyy-MM-dd HH:mm:ss:SSS"1.格式化:Date -->Stri ...

  5. lua C++ wrapper

    背景 最近在研究lua的c++绑定库,使用过一下几个 luabind 问题:没人维护 https://github.com/vinniefalco/LuaBridge https://github.c ...

  6. yum和编译两种方式升级or降级Centos内核

    http://blog.51cto.com/renzhiyuan/1882599 今天探讨用yum和编译两种方式升级或者降级内核版本: 升级:比如玩kvm,docker等虚拟化,centos内核则升级 ...

  7. Linux 命令之删除命令

    在Linux下删除文件用rm命令,具体用法如下: rm [选项] 文件 选项说明: -f -force 忽略不存在的文件,强制删除,无任何提示 -i --interactive 进行交互式地删除 -r ...

  8. php保留两位小数的3种方法

    <?php $num = 8.16789; //第一种:利用round()对浮点数进行四舍五入 echo round($num,2).PHP_EOL; //8.17 //第二种:利用sprint ...

  9. WEB开发库收集

    1. EASYUI          http://www.jeasyui.com/ [INTRODUCTION] jQuery EasyUI framework helps you build yo ...

  10. golang interface判断为空nil

    要判断interface 空的问题,首先看下其底层实现. interface 底层结构 根据 interface 是否包含有 method,底层实现上用两种 struct 来表示:iface 和 ef ...