abstract 抽象
1.被abstract修饰的方法是抽象方法,抽象方法没有方法体
2.被abstract修饰的类是抽象类
如果一个类中包含了抽象方法,那么这个类必须被声明成一个抽象类
3.1变成抽象子类,躺平,实现一部分/不实现,继续抽象
3.2.变成普通子类,”父债子偿”,子类需要实现抽象父类中的所有的抽象方法(即 重写)
4.抽象类不可以实例化 即 不能创建对象
注意:abstract 不可以和 private static final一起使用
private: 被私有化后,子类无法重写,与abstract相违背
static: 静态优先于对象存在,存在加载顺序问题
final: 被final修饰后,无法重写,与abstract相违背
/*1.抽象类是否有构造方法? 有2.既然抽象类不能实例化 为什么有构造方法?不是为了自己使用 是为了子类创建对象时使用*/
/*抽象类中可以定义成员变量吗? -- 可以抽象类中可以定义成员常量吗? -- 可以抽象类中可以定义普通方法吗? -- 可以抽象类中可以定义抽象方法吗? -- 可以抽象类中可以全是普通方法吗? -- 可以如果一个类中都是普通方法,为什么还要被修饰成抽象类呢?because,抽象类不可以被实例化,so如果不想让外界创建本类的对象,就可以把普通类声明成抽象类抽象类中可以全是抽象方法吗? -- 可以*/
面向对象 - 异常
异常的继承结构
异常层次结构中的根是Throwable 异常的顶级父类
Error:目前我们编码解决不了的问题
编译异常:为运行代码就报错了,强制要求处理
Exception:异常
运行时异常:运行时代码才报错,可以通过编译,不强制要求处理
报错ArithmeticException—算数异常
报错InputMismatchException—输入不匹配异常
学会看报错信息提示,找到错误方向
看报错的行号提示,确定报错位置,哪里不对点哪里
解决方案
1.捕获处理 - 自己解决
2.向上抛出 - 别人解决 ↓
异常捕获处理格式:
//try-catch 可以嵌套,如果有多种异常类型需要特殊处理的情况try{可能会抛出异常的代码}catch(预先设想的异常类型 异常名){万一捕获到了异常,进行处理的解决方案}
例:try{System.out.println("请输入要计算的第1个整数");int a = new Scanner(System.in).nextInt();System.out.println("请输入要计算的第1个整数");int b = new Scanner(System.in).nextInt();System.out.println(a/b);}catch (Exception e){System.out.println("您输入的数据不对");}//使用多态的思想,无论是什么异常,都可以统一看做父类型Exception
2.向上抛出
在方法的小括号和大括号之间,写throws 异常类型
如果有多个异常,使用逗号隔开即可
//如果一个方法抛出了异常,那么谁来调用这个方法,谁就需要处理这个异常//这里的处理有两种方法: 捕获异常 或 向上抛出//注意:我们一般会在main()函数调用之前将异常解决掉public static void main(String[] args) {f();}private static void f(){try {method3();} catch (Exception e) {System.out.println("输入数据不对");}} //向上抛出private static void method3() throws Exception{System.out.println("请输入要计算的第1个整数");int a = new Scanner(System.in).nextInt();System.out.println("请输入要计算的第1个整数");int b = new Scanner(System.in).nextInt();System.out.println(a/b);}
