Java入门——(7)抽象类和接口以及异常


前言

今天学习的是抽象类、接口和异常的处理。


一、抽象类

抽象类的概念

抽象类是一种不能被实例化的类,只能被继承。它可以包含抽象方法和普通方法。抽象方法是只有方法签名而没有具体实现的方法,在抽象类中定义了抽象方法的类必须被声明为抽象类。

抽象类的使用

抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类可以包含抽象方法和非抽象方法。抽象方法是没有实现的方法,只有声明的方法。子类必须实现父类中的所有抽象方法,否则子类也必须声明为抽象类。

抽象类的主要用途是作为其他类的基类,通过继承抽象类可以获得其方法的定义,然后再在子类中实现这些方法。抽象类可以定义一些通用的方法或字段,以及一些必须被子类实现的抽象方法。

在Java中,我们使用abstract class关键字来定义抽象类。例如:

abstract class Animal {
    abstract void makeSound();
}

这个Animal类就是一个抽象类,它包含了一个抽象方法makeSound()。子类必须实现这个方法才能被实例化。例如:

class Dog extends Animal {
    void makeSound() {
        System.out.println("Woof");
    }
}  

这个Dog类就继承了Animal类,并实现了makeSound()方法。现在我们可以创建Dog对象并调用它的makeSound()方法了。


二、接口

接口的概念

在Java中,接口是一个全部由抽象方法组成的集合,接口需要用interface定义,里面只能有抽象的方法和常量。接口体现的是事物扩展的功能,在Java中,类定义了一个实体,包括实体的属性,实体的行为。一个类通过继承接口的方式,从而来继承并且实现接口中的抽象方法。

接口的实现类

在Java中,实现类是针对接口来讲的。实现类就是来实现接口中约定的内容。实现通过关键字implements来。

例如,我们有一个接口MyInterface,它有一个方法void myMethod()。我们可以创建一个实现类MyImpl来实现这个接口,并在其中提供myMethod()方法的具体实现。代码如下:

public class MyImpl implements MyInterface {
    public void myMethod() {
        System.out.println("Hello World!");
    }
}

接口中的常量和方法

在Java中,接口是一种引用类型,类似于class,它只能包含常量、方法签名、默认方法、静态方法和嵌套类型。方法体只存在于默认方法和静态方法中。接口不能被实例化——它们只能由class实现。

常量:接口中的属性只能是常量,可以通过(接口名.常量)调用总是:public static final修饰。不写也是。

方法:接口中的方法只能是:public abstract。省略的话,也可以不写。


三、异常

异常的定义

异常是程序运行过程中出现的问题或错误。它可能由错误的输入、不符合预期的操作或其他原因引起。

Java的异常处理机制是一种错误处理机制,它允许程序员在程序运行时捕获和处理异常。Java语言定义了很多异常类,将运行错误和异常的信息和处理方法封装在了异常类中,帮助程序员检查和控制异常,这样程序员就可以将时间和精力放在业务逻辑的实现上,而这套机制就是Java的异常处理机制。

异常的处理

异常处理是指在程序中检测、传播和处理异常的过程。

Java的异常处理机制是一种错误处理机制,它允许程序员在程序运行时捕获和处理异常。Java语言定义了很多异常类,将运行错误和异常的信息和处理方法封装在了异常类中,帮助程序员检查和控制异常,这样程序员就可以将时间和精力放在业务逻辑的实现上,而这套机制就是Java的异常处理机制。

try-catch

在Java中,我们可以使用try-catch块来捕获和处理异常。try块包含可能会抛出异常的代码,catch块包含处理异常的代码。当try块中的代码抛出一个异常时,程序会跳转到与之匹配的catch块中执行。如果没有匹配的catch块,则程序会终止并显示一个错误消息。
try-catch语句的基本语法如下:

try {
    // 可能抛出异常的代码
} catch (ExceptionType e) {
    // 处理异常的代码
}

在try语句块发生的问题,因为异常而中断,在catch块中被捕获,解决异常情况并且像错误没有发生一样继续运行。并且,try—catch语句块可以嵌套使用。

finally块

finally语句块是try-catch语句中的一个可选部分,用来确保在发生异常时清理代码中的临时变量或者释放资源。如果在try块和catch块中包含了return语句,finally块中的代码也会在返回前被执行。

try {
    int x = 5/0; // 这里会抛出ArithmeticException异常
} catch (ArithmeticException e) {
    System.out.println("捕获到了除数为0的异常");
} finally {
    System.out.println("这里是finally块,无论是否发生异常都会执行");
}

输出:

捕获到了除数为0的异常
这里是finally块,无论是否发生异常都会执行

try、catch、finally 块的关系

1.try 块不能单独存在,后面必须跟 catch 块或者 finally 块。
2.三者之间的组合为:try—catch 、try—catch—finally 、 try—finally 这几种是合法的。
3.一个 try 块可以有多个 catch 块,从上到下多个 catch 块的范围为从小到大。

throw语句

throw语句是Java中用于抛出异常的关键字。当程序出现异常情况时,可以使用throw语句抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行 。
throw语句有两种使用方式:一种是在方法内部使用,另一种是在方法签名中使用。在方法内部使用时,throw语句后面跟着一个异常对象或者一个异常类;在方法签名中使用时,throws关键字后面跟着一个或多个异常类 。

public void divide(int a, int b) throws ArithmeticException {
    if (b == 0) {
        throw new ArithmeticException("除数不能为0");
    }
    int result = a / b;
    System.out.println("a / b = " + result);
}

在上面的代码中,如果传入的除数b为0,则会抛出一个ArithmeticException异常。在调用divide方法时,需要使用try-catch语句来捕获这个异常并进行处理。

异常的分类

异常可以被分为三种类型:检查异常(Checked Exception)、运行时异常(Runtime Exception)和错误(Error)。

  • 检查异常是在编译时强制检查的异常,必须显示捕获或声明抛出。例如,IOException 是一种检查异常,必须对其进行处理。
  • 运行时异常是指在运行时可能发生的异常,不需要强制捕获或声明抛出。例如,NullPointerException 是一种运行时异常,可由编译器自动捕获。
  • 错误是指系统级别的错误或资源耗尽等无法恢复的情况。与异常不同,错误不应该被捕获或处理,而是应该由虚拟机处理。例如,OutOfMemoryError 是一种错误。
    异常分为运行时异常编译时异常
运行时异常编译时异常
类结构是RuntimeException的子类除了RuntimeException的子类,都是编译时异常
自动/手动异常自动抛出手动处理
代码不需要写抓、抛代码必须写抓、抛代码
提醒程度不明显
// 检查异常的例子
try {
    FileInputStream file = new FileInputStream("file.txt");
} catch (IOException e) {
    System.out.println("文件不存在");
}
// 运行时异常的例子
int num1 = 10;
int num2 = 0;
int result;
try {
    result = num1 / num2;
} catch (ArithmeticException e) {
    System.out.println("除数不能为零");
}

Java中的运行时异常和编译时异常有很多种,这里列举一些例子:
运行时异常:NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException、ClassCastException、InterruptedException等。
编译时异常:TypeNotPresentException、MalformedURLException、IOException等。


总结

今天先到这里啦。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiulaizhiwo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值