1.异常
1.1 异常的继承结构
异常层次中的根节点Throwable
Error : 目前我们编码解决不了的问题
Exception : 通常可以通过编程解决的问题
1)编译时异常 : 不用运行就已经报错了,比如,少写了分号/父类对象调用子类的特有功能。。。
2)运行时异常 : RunTimeException,编写以及保存的时候没有报错,但是在执行中报错了
注意: 运行时异常是可以通过编译的,不强制要求处理,方法上有默认抛出RunTimeException
1.2 异常处理方案
1.捕获处理try-catch : 自己解决,格式:
try{ 可能会出现异常的所有的代码 }catch(预测的异常类型 异常名字){ 如果匹配到了我们预测的异常类型,就执行此处异常的处理方案 }
2.向上抛出throws :在本方法不解决这个问题,谁来调用这个方法,谁解决问题,格式:
public void play() throws 异常类型1,异常类型2 {}
package cn.tedu.review; import java.util.InputMismatchException; import java.util.Scanner; /*本类用于复习异常的解决方案*/ public class TestException { public static void main(String[] args) { //1.调用方法,求两个整数除法的结果 //method1();//try-catch分别单独处理了两个子类型异常 //method2();//try-catch使用多态,用父类型异常做统一处理 //method3();//throws本方法不处理异常,将异常抛出 /*main()不能直接调用method3(),因为实际上被抛出的问题没有被解决,该报错还报错*/ f();//用来在main()调用method3()之前,处理掉问题 } private static void f() { try{ method3();//调用方法3,即使它抛出异常,我们也在此处处理掉了,不会抛给main() }catch (Exception e){ System.out.println("数据不对!"); } } //private static void method3() throws ArithmeticException,InputMismatchException{ private static void method3() throws Exception{ System.out.println("输入第一个数:"); int a = new Scanner(System.in).nextInt(); System.out.println("输入第二个数:"); int b = new Scanner(System.in).nextInt(); System.out.println(a/b); } private static void method2() { try{ System.out.println("输入第一个数:"); int a = new Scanner(System.in).nextInt(); System.out.println("输入第二个数:"); int b = new Scanner(System.in).nextInt(); System.out.println(a/b); //不管是子异常:算术异常还是输入不匹配异常,都可以被Exception匹配到 }catch (Exception e){ //提供的通用的解决方案 System.out.println("您输入的数据不正确,请重新输入!"); } } //ArithmeticException--除数为0 //InputMismatchException--接收的数据类型不是整形 /*解决方案一:*/ private static void method1() { try{ System.out.println("输入第一个数:"); int a = new Scanner(System.in).nextInt(); System.out.println("输入第二个数:"); int b = new Scanner(System.in).nextInt(); System.out.println(a/b); //针对于算术异常-子异常 特有的解决方案: }catch (ArithmeticException e){ System.out.println("除数不能为0!"); //针对于与输入不匹配异常-子异常 特有的解决方案 }catch (InputMismatchException e){ System.out.println("请输入整型的数据:"); } } }
2.抽象
2.1 抽象类
被关键字abstract修饰的类是抽象类
一旦一个类中包含了抽象方法,那么这个类必须被声明成一个抽象类
抽象类中的方法不做限制,非常自由:全普 / 全抽 / 半普半抽
抽象类不可以实例化–创建对象
抽象类有构造方法,它自己不用,但是为了子类创建对象时调用
如果一个子类继承了抽象父类,那么有两种解决方案:
1)作为一个抽象子类:不实现/实现部分抽象父类的抽象方法,躺平
2)作为一个普通子类:需要实现抽象父类的全部抽象方法,还债
2.2 抽象方法
被关键字abstract 修饰的方法就是抽象方法
抽象方法没有方法体{ },直接以分号结束