异常体系
异常分为两类:编译时异常和运行时异常,也称为受检时异常和非受检异常,编译时异常必须显示处理,否则程序就会出现错误,无法通过编译,而运行时异常无需显示处理,也可以和编译时异常一样处理
异常处理
两种方案:
1.try…catch…
2.throws
异常处理之try…catch…
格式:
try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常的处理代码;
}
异常处理之throws
格式:throws 异常名
注:throws 和 throw 的区别:
throws:
1.用在方法声明的后边,跟的是异常名
2.表示抛出异常,由该方法的调用者来处理
3.表示出现异常的一中可能性,并不一定会发生这些异常
throw:
1.用在方法体内,跟的是异常对象名
2.表示抛出异常,由方法体内的语句处理
3.执行throw一定抛出了某种异常
Throwable的成员方法:
1.public String getMessage() [返回此throwable的详细消息字符串]
2.public String toString()[返回可抛出的简短描述]
3.public void printStackTrace()[把异常的错误信息输出在控制台]
注:此比较常用
案例1(try…catch…的应用):
public class ExceptionDemo{
public static void main(String[] args){
System.out.println("开始");
method();
System.out.println("结束");
}
public static void method(){
try{
int[]arr={1,2,3,};
System.out.println(arr[3]);//属于运行时异常
}catch(ArrayIndexOutOfBoundsException e){
e.printStackTrace();//调用了throwable的成员方法(继承父类的)
}
}
}
JVM中默认处理方案是如果程序出现问题,没有做处理时程序会终止运行,但经过异常处理后,仍可继续运行程序
自定义异常
格式:
public class 异常类名 extends Exception{
无参构造
带参构造
}
举例:
public class ScoreException extends Exception{
public ScoreException(){}
public ScoreException(String message){
super(message);
}
}
案例2(自定义异常)
public class ScoreExpecion extends Exception{
public ScoreExpecion(){}
public ScoreExpecion(String message){
super(message);
}
}
public class Teacher {
public void chekScore(int score)throws ScoreExpecion{
if(score<0||score>100){
// throw new ScoreExpecion();//throw用于方法体内
throw new ScoreExpecion("你给的分数有误,分数应在0~100之间");
}else{
System.out.println("分数正确");
}
}
}
import java.util.*;
public class TeacherTest {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int score=sc.nextInt();
Teacher s=new Teacher();
try {
s. chekScore(score);
} catch (ScoreExpecion scoreExpecion) {
scoreExpecion.printStackTrace();
}
}
}
Java语言的输入和输出
流的概念:流是指计算机各部件之间的数据流动
分类:
1.从数据的传输方向上划分:输入流与输出流
2.从流的内容上划分:字节流与字符流
输入输出流(数据流):
使用输入流读出数据,使用输出流写入数据
缓冲流:
即有一个流配有一个缓冲区,这个缓冲区是专门用于传送数据的一块内存
当向一个缓冲流写入数据时,系统是将数据发送到缓冲区,当缓冲区满时,系统将数据全部发送到相应的外部设备;当从一个缓冲流中读取数据时,数据则将从缓冲读取数据
作用:提高了内存和外部设备之间的数据传输效率