Java异常是Java一种机制,程序执行不正常的情况被称为异常,;异常分为两种 Expection 和 Error
Exception : 可被解决的异常,常见的有数组越界 网络中断 试图读取不存在的文件
public class ExcptionTest {
public void test(){
System.out.println( "====运行前====" );
int a=10/0;
System.out.println( "====运行后====" );
}
public static void main(String[] args) {
ExcptionTest et= new ExcptionTest();
et.test();
}
}
运行结果就是运行时异常 可以通过try catch 进行捕获java.lang.ArithmeticException: / by zero
还有一种是编译时异常IOException,除了运行时异常 剩下的都是编译时异常
Java编程语言使用异常处理机制为程序提供了错误处理的能力。
在我们认为会有异常发生的代码上,我们可以加上语句来捕获并处理错误:
try{
}catch{
}final{
}
try:在这个代码块中任何一句语句发生了异常,该语句以及下面的语句都不会继续执行(不要随意将代码放进try代码块中),程序将跳转到catch代码块中来处理异常。
catch:把抓获的异常匹配类型,保证程序能继续执行下去。try后可以跟多个catch语句,但前一个catch语句的异常类要从子类到父类写,否则会出现编译错误。
final:该代码块里的程序一定会执行。一个try只能有一个final。
import java.io.UnsupportedEncodingException;
public class Demo4 {
/*
关键字 throws
throws在方法的参数列表后面声明此方法可能会出现异常,表示此方法不处理异常,交给方法调用处去处理
调用此方法时,在调用处根据情况对异常是否进行处理
运行时异常:继承了RuntimeException,在编译时,可以对异常不强制处理
编译期异常:没有继承RuntimeException,在编译时,必须对异常进行处理
*/
public static void main(String[] args) {
try {
test1(); //main是最顶层,不能再抛出,再抛就是虚拟机了;在最顶层需要对异常try catch处理
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
public static void test1() throws UnsupportedEncodingException {
test2();
System.out.println("test 1");
}
public static void test2() throws UnsupportedEncodingException {
"abc".getBytes("utf-8");//使用throws声明,向上抛出异常,可以不用处理getBytes()可能出现的异常
System.out.println("test 2");
}
}
自定义异常:
import java.io.UnsupportedEncodingException;
public class Demo5 {
/*
throw:在方法体内使用,作用是抛出一个异常对象,抛出后程序不继续向下进行
一般在方法中不符合逻辑业务要求时,可以主动使用throw抛出异常
throws:在方法声明处使用,声明该方法可能会出现的异常,不强制进行处理
自定义异常:可以自定义类库中没有的异常,用自定义异常标记业务逻辑异常,避免与标准异常混淆
*/
public static void main(String[] args) {
try {
String a=null;
("ABC").getBytes(a);
throw new UnsupportedOperationException();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println("Demo5");
}
public static void test(int score) throws ScoreException {
if (score<0&&score>20){
throw new ScoreException("数字不符合要求");
//主动的抛出异常,下面语句不在运行
}
if (score>0&&score<10){
System.out.println("5");
}
if (score>10&&score<20){
System.out.println("25");
}
}
}
public class ScoreException extends Exception{
//自定义异常部分
public ScoreException() {
}
public ScoreException(String message) {
super(message);
}
}