异常和集合类
一.异常概述
异常就是Java程序在运行过程中出现的错误。一般被分为两大类:编译时异常和运行时异常。
体系:
Throwable---Error
---Exception
---RuntimeException
编译时异常:
运行时异常:
二.异常处理1.throw和throws
throw:用在函数内,用于抛出异常对象
throws:用在函数上,用于抛出异常类,可抛出多个Tips:
1.当函数内用throw抛出异常,未进行try处理时,必须在函数上声明(RuntimeException除外),当调用此函数的时候,需用try处理。
2.如果函数内抛出了异常,处理方法可以是throws可以是try
2.try...catch...finally语句块处理
语法格式:(假设错误是除零)try{
//可能出现异常的代码块
FileputStream in = new FileputStream(path);
//一旦出现异常,下面的代码不会再执行
System.out,println();
}catch(Exception e){
//by zero
e.getMessage();
//异常名称:异常信息
e.toString();
//异常名称,异常信息,异常位置
e.printStackTrace();
}finally{
//一定会执行的代码
}
}3.自定义异常
自定义异常
语法格式:public class 异常类名 extends Exception{
有参构造
}
public class ScoreException extends Exception{
ScoreException(String message)
{
super(message);
}
}
实例:ScoreException.java:
public class ScoreException extends Exception{
ScoreException(String message)
{
super(message);
}
}
Teacher.java:
public class Teacher {
public void checkScore(int score) throws ScoreException{
if(score<0||score>100) {
throw new ScoreException("你的分数有误!");
}else {
System.out.println("分数正常");
}
}
}
TeacherTest.java:
public class TeacherTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入分数:");
int score = sc.nextInt();
Teacher t = new Teacher();
try {
t.checkScore(score);
} catch (ScoreException e) {
e.printStackTrace();
}
}
}
4.异常处理原则
1.当捕获到的异常,本功能处理不了,应该在catch中继续抛出try
{
throw new AException();
}
catch(AException e)
{
throw e;
}
2.子类在重写父类抛出异常的方法时,要么不抛出异常,要么抛出与父类方法相同的异常或该异常的子类。如果被重写的父类方法只抛出受检异常,则子类重写的方法可以抛出非受检异常。例如,父类方法抛出了一个受检异常IOException,重写该方法时不能抛出Exception,对于受检异常而言,只能抛出IOException及其子类异常,也可以抛出非受检异常。//正确
class A {
public void fun() throws Exception {}
}
class B extends A {
public void fun() throws IOException,RuntimeException {
}
}
//错误
class A {
public void fun() throws RuntimeException {}
}
class B extends A {
public void fun() throws IOException, RuntimeException {
}
}Tip:
RuntimeException和它的子类以及Error和它的子类都是非受检异常。