1 异常
1.1概述
异常是指封装错误信息的对象
组成结构:类型 提示 行号
Tips :Ctrl +Shift + T:在eclipse当中查找你想要找到的类
1.2异常的继承结构
Throwable:顶级父类
—Error:顶级父类
—Exception:系统错误,无法修复
—RunTimeException:可以修复的错误
–classCastException
–classNotFoundException
1.3异常处理
当程序遇到了异常,通常有两种处理方式:捕获或者向上抛出
当一个方法抛出异常,调用位置可以不做处理继续向上阿婆出,也可以捕获处理异常
1)捕获方式
try{
需要捕获的代码
} catch(异常类型 异常名){
处理方案
}
2)抛出方式:
在会发生异常的方法上添加代码:throws异常类型
例如:public static void main(String[]args)throws Exception
1.4异常测试
package day08;
import java.util.InputMismatchException;
import java.util.Scanner;
public class ExceptionTest {
public static void main(String[] args) throws Exception {
method1();
method2();
}
public static void method2() 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);
}
public 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);// ArithmeticException算数错误,InputMismatchException输入类型异常
} catch (ArithmeticException e) {
System.out.println("分母不能为0请重新输入");
} catch (InputMismatchException e) {
System.out.println("输入的类型不正确请重新输入");
} catch (Exception e) {
System.out.println("请输入正确的整数");
}
}
}
总结:
- try()里面放的是可能发生异常的代码
- 如果发生异常被捕获,就被匹配对应的解决方案
- 由于程序种可能存在多种异常,所以catch可以配合多次使用
- 如果还有其他的异常情况,用Exception匹配捕获
访问控制符
用来控制符,或者类中的成员的访问范围.
Tips:default是表示不写修饰符,默认,如果写default单词来修饰会报错
3.抽象类
3.1抽象类
Java中可以定义被abstract关键字修饰的方法,这种方法只有声明,没有方法体,叫做抽象方法.
Java中可以定义被abstract关机簪子修饰的类,被abstract关机簪子修饰的类叫做抽象类
如果一个类含有抽象方法,那么她一定是一个抽象类
抽象类中的方法交给子类来完成
3.2抽象方法的格式
权限修饰符 abstract 返回值类型 方法名 (参数列表);
3.3特点
- abstract可以修饰方法或者类;
- 被abstract修饰的类叫做抽象类,被abstract修饰的方法叫做抽象方法
- 抽象类中可以没有抽象方法
- 如果类中有抽象方法,那么该类必须定义为一个抽象类
- 子类如果继承了抽象类之后,要么还是一个抽象类,要么就把所有抽象方法都重写
- 抽象方法用于多态中
- 抽象类不可以被实例化
package day08;
public class AbstractDemo {
public static void main(String[] args) {
Animal3 pig = new Pig();
pig.eat();
pig.fly();
// Animal dog = new Dog();抽象子类不能实例化
// Cannot instantiate the type Dog
}
}
abstract class Animal3 {
public void eat() {
System.out.println("吃好吃的就可以");
}
public void play() {
System.out.println("玩好玩的就可以");
}
public abstract void fly();
public abstract void fly2();
}
class Pig extends Animal3 {
@Override
public void fly() {
System.out.println("小猪飞了");
}
@Override
public void fly2() {
System.out.println("小猪又飞了");
}
}
abstract class Dog3 extends Animal3 {
}
3.5练习3:抽象类构造函数测试
抽象类中的构造函数通常在子类实例化时候使用
package cn.oop;
public class Test3_Abstarcr2 {
public static void main(String[] args) {
Animal3 a = new Dog3();
// Animal3 a2 = new Animal3();抽象类不能实例化创建对象,会报错
// Cannot instantiate the type Animal3
}
}
abstract class Animal3 {
public Animal3() {
System.out.println("Animals...构造方法");
}
}
class Dog3 extends Animal3 {
public Dog3() {
super();
System.out.println("Dog3...构造方法");
}
}
3.6练习4:抽象类成员测试
package cn.oop;
/* 本类用于测试抽象类中的成员*/
public class Test4_Abstract {
public static void main(String[] args) {
new Apple();
}
}
abstract class Fruit {
int sum = 10;// 抽象类中可以有成员变量
final String name = "banana";// 抽象类中可以有成员常量-但是常量的值不能改变
public void eat() {
System.out.println("吃什么水果都可以");
}
public void eat2() {// 抽象类中可以有普通方法
System.out.println("eat2...吃什么水果都可以");
}
// 抽象类中可以有抽象方法,这个类就必须被声明为抽象类
abstract public void clean();
// 如果一个类中都是普通方法,那么这个类为什么还要被申明成为抽象类呢?
// 因为抽象类不可以创建对象,如果不想让外界创建本类的对象,可以把普通类声明成为一个抽象类
}
class Apple extends Fruit {
// 当一个类集成了费父类,父类是一个抽象类时候
// 子类需要重写父类中的抽象方法,如果不重写,子类自己就要变成一个抽象子类
public void eat2() {
System.out.println("水果中还是苹果好吃~");
}
@Override
public void clean() {
System.out.println("苹果要洗洗再吃");
}
}
4.拓展
4.1程序设计:分析老师案例—面向抽象编程
package cn.oop;
public class Test5_Teacher {
public static void main(String[] args) {
Teacher et = new EnglishTeacher();
Teacher mt = new EnglishTeacher();
et.ready();
et.teach();
mt.ready();
mt.teach();
}
}
abstract class Teacher {
public void ready() {
System.out.println("老师正在备课");
}
abstract public void teach();
}
class EnglishTeacher extends Teacher {
@Override
public void teach() {
System.out.println("英语老师正在教英语");
}
}
class MathTeacher extends Teacher {
@Override
public void teach() {
System.out.println("数学老师正在教数学");
}
}