异常
异常解决方案1--捕获处理--自己解决
异常捕获处理的格式:
try{
可能抛出异常的代码
}catch(异常的类型 异常的名字){
万一捕获了异常,进行处理的解决方案
}
try-catch结构可以嵌套:如果有多种异常类型需要特殊处理的话
private static void method2(){
//1.按照捕获处理的格式完成结构
try {
//2.复习刚刚的代码
System.out.println("请输入你要计算的第一个整数");
int a1=new Scanner(System.in).nextInt();
System.out.println("请输入你的第二个整数");
int a2=new Scanner(System.in).nextInt();
System.out.println(a1/a2);
}catch (ArithmeticException e){//异常类型 异常名
System.out.println("除数不能为0!");
}catch (InputMismatchException e){
System.out.println("请输入规定的整数类型");
/*使用多态的思想,无论是什么子异常,统一看做父类型Exception
* 做出更加通用的解决方案,甚至可以只写这一个,上面2个不写*/
}catch (Exception e){
System.out.println("你的数据不对,请重新输入!");
}
}
异常解决方案2--向上抛出--交给调用者解决
异常抛出的格式:在方法的小括号与大括号之间,写:throws异常类型
如果有多个异常,使用逗号分割即可
如果一个方法抛出了异常,那么谁来调用这个方法,谁就需要处理这个异常
这里的处理也有两种方案:捕获处理 或 继续向上抛出
但注意:我们一般会在main()调用之前将异常解决掉,而不是将问题抛给main(),因为没人解决了,该报错还报错
private static void f() {
try{
method3();
}catch (Exception e){
System.out.println("数据不对");
}
}
private static void method3() throws Exception{
//1.复习刚刚的代码
System.out.println("请输入你要计算的第一个整数");
int a1=new Scanner(System.in).nextInt();
System.out.println("请输入你的第二个整数");
int a2=new Scanner(System.in).nextInt();
System.out.println(a1/a2);
}
抽象
被abstract关键字修饰的方法是抽象方法,抽象方法没有方法体
被abstract修饰的类是抽象类。如果一个类中包含了抽象方法,那么这个类就必须被声明成一个抽象类
当一个子类继承抽象父类以后,有两种解决方案
方案一:变成普通方法,实现父类中所有未实现的抽象方法,“父债子偿”
方案二:变成抽象子类,继续抽象“躺平”
抽象类不可以被实例化
抽象类中可以定义成员变量,成员常量
抽象类中可以全是普通方法:如果抽象类中没有抽象方法,是为了防止外界创建本类的对象(抽象类不可以被实例化)
public class AbstractDemo2 {
public static void main(String[] args) {
//5.抽象类不可以实例化/创建对象
// Animal2 a=new Animal2();
//6.创建子类对象进行测试
Pig2 p=new Pig2();
}
}
//1.创建父类
abstract class Animal2{
//3.创建父类的无参构造
public Animal2(){
System.out.println("我是父类的无参构造");
}
}
//2.创建子类
class Pig2 extends Animal2{
public Pig2(){
System.out.println("我是子类的无参构造");
}
}