Java异常

  • 异常

数组越界:ArrayIndexOutofBoundsException

字符串越界:StringIndexOutofBoundsException

空指针:NullPointerException

类型转换:ClassCastException

栈溢出:StackOverflowError

同步修改:ConcurrentModificationException

    1. Java程序中的错误

1.1.1语法错误

不符合Java的基本语法。编译时就不会通过!

如何解决???修改代码,符合Java语法。

1.1.2运行时错误

没有语法错误,可以通过编译,也可以执行。

执行时,会因为内部或外部的问题,导致程序无法运行而停止

可以解决的:

不可解决的:

解决方式:异常处理

1.1.3 逻辑错误

代码可以编译,也可以执行,也可以得到结果。

但是结果不正确!!!

解决方法:

  1. 梳理算法
  2. 代码实现是否与算法一致
  3. Debug-调试

让程序一步步地执行,查看执行状态

执行流程

变量的值

1.2异常的体系结构

1.2.1Throwable类

java中所有的可抛出的错误的父类。

子类:

1.Error类

代表的java中的错误

无法在代码中处理。

比如:

StackOverflowError类,表示栈溢出。方法的无限递归调用。

OutOfMemoryError类,表示内存溢出。

JVM天生的缺陷。JVM中的一些Bug。

2.Exception类

代表java中的异常。

这些异常都是可以预防的。

异常又可以分为两类:

1)检查时异常:编译时异常

这种异常必须进行处理,如果不处理,它会报语法错误。

所有的运行时异常,都不是RuntimeException的子类

2)非检查时异常:运行时异常。

不要求必须进行处理,不处理不会报语法错误。

所有的运行时异常,都是RuntimeException的子类

1.3.1捕获异常

使用try...catch...捕获异常。

语法:

try{

可能抛出异常的代码

}catch(异常的类型 变量){

异常处理的代码

}catch(异常的类型 变量){

异常处理的代码

}finally{

必定要执行的代码

}

执行过程:

1)尝试执行try后面的代码块。

2)如果抛出异常,代码块将停止执行,跳到catch检查抛出的异常和catch捕获的异常是否匹配,如果匹配,进入catch后的代码执行。

3)如果不匹配,再比较下一个catch。

4)如果try后的代码执行正常。则会跳过所有的catch。

5)无论trycatch是否抛出了异常,finally代码块总是会执行。

注意:

1)可以没有catch,也可以有多个catch,也可以没有finally,catch和finally至少有一个

2)当一个catch要捕获多个异常时,可以使用 | 来分割

3)catch后的异常不能重复出现,如果异常存在父子关系,必须把子类放前面

4)finally代码块,无论前面是否抛出异常,总会执行。包括return;除非System.exit().

1.3.2向上抛出

不在当前方法中处理异常,而是交给方法的调用者。

语法:

修饰符 返回值类型 方法名(参数列表)throws 异常类型1,异常类型2 {

方法体(包含可能出现异常的代码)

}

1.4自定义异常

1)定义异常要找一个异常类作为父类

2)抛出自定义异常需要使用throw关键字

第二章 IO流

2.1什么是流

数据流,数据从一个地方传输到另一个地方。

IO:Input/Output     输入/输出

2.1.1分类

1.流向

Input:输入流——数据由其他的地方流向程序内部。

Output:输出流——数据从程序内部,流向外部的其他地方。

参照物:程序

文件  读取文件的内容。。输入流

2.单位

字节流Stream:数据以字节为单位进行传输。

用于二进制数据的传输。比如文件、图片、安装程序。。。

字符流:数据以字符为单位进行传输。

用于文本数据的传输

3.组合分类

字节输入流:InputStream

子类:FileInputStream、ObjectInputStream

字节输出流:OutputStream

子类:FileOutputStream、ObjectOutputStream

字符输入流:Reader

子类:BufferedReader、FileReader

字符输出流:Writer

子类:BufferedWriter、FileWriter

装饰类(Buffered)不能独立使用,必须依赖于原始类(FileRead/FileWriter)

4.序列化与反序列化

序列化:将对象转换成二进制的流

反序列化:从二进制的流中读取对象。

类必须要实现Serializable接口

Transient修饰属性,会在序列化时忽略掉被修饰的属性

2.1.2File类

File.createTempFile()     在默认临时文件目录中创建一个空文件,使用给定前缀和后缀

File.getAbsoluteFile()返回抽象路径名的绝对路径名形式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值