学习文档(二)

发布于:2024-10-11 ⋅ 阅读:(138) ⋅ 点赞:(0)

异常

这是Java 异常类层次结构图概览

Exception 和 Error 有什么区别?

一、概念与本质

Exception(异常):异常是在程序运行过程中出现的可预料的、可恢复的不正常情况。例如,试图打开一个不存在的文件时,会抛出FileNotFoundException,这是一种异常。异常通常表示程序运行时的意外情况,但这些情况是可以通过合理的错误处理机制来处理的,使程序能够从异常中恢复并继续执行。

Error(错误) : 错误是指在程序运行过程中发生的严重问题,通常是不可恢复的。例如,OutOfMemoryError表示内存耗尽,这种情况下程序通常无法继续正常运行。错误往往是由于系统资源耗尽、虚拟机内部错误等严重问题导致的。

二、处理方式

Exception(异常):

异常可以被捕获(try - catch 语句块)和处理。例如:

 try {
       FileInputStream fis = new FileInputStream("nonexistent.txt");
   } catch (FileNotFoundException e) {
       // 处理文件不存在的情况,比如提示用户重新输入文件名
       System.out.println("文件不存在,请检查文件名");
   }

 有些异常必须在方法签名中声明(受检异常,Checked Exception),如IOException,这样调用该方法的代码就知道需要处理这种异常。

Error(错误):

Error 属于程序无法处理的错误,因为 Error 通常表示严重的系统问题,即使捕获了也很难从这种错误中恢复程序的正常运行。例如,捕获OutOfMemoryError并不能真正解决内存不足的问题,因为此时系统已经处于一种资源极度匮乏的状态。

面向对象的三大特性

封装 

隐藏对象的属性和细节实现,仅对外公开访问方法,控制程序中的读和写的访问级别。

封装的示例代码:

public class Student {
    private int id;//id属性私有化
    private String name;//name属性私有化

    //获取id的方法
    public int getId() {
        return id;
    }

    //设置id的方法
    public void setId(int id) {
        this.id = id;
    }

    //获取name的方法
    public String getName() {
        return name;
    }

    //设置name的方法
    public void setName(String name) {
        this.name = name;
    }
}
继承

继承是面向对象编程中的一个重要概念,它是一种创建新类(称为子类或派生类)的方式,新类从现有的类(称为父类或基类)获取属性(成员变量)和方法。子类继承父类的状态(属性)和行为(方法),使得子类可以重用父类的代码。

关于继承如下 3 点请记住:

  1. 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有
  2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
  3. 子类可以用自己的方式实现父类的方法。

继承的示例代码:

 //继承
class Animal {
       private String name;
       public Animal(String name) {
           this.name = name;
       }
       public void eat() {
           System.out.println(name + " is eating.");
       }
   }
   class Dog extends Animal {
       public Dog(String name) {
           super(name);
       }
       public void bark() {
           System.out.println("The dog is barking.");
       }
   }


//重写
class Dog extends Animal {
       public Dog(String name) {
           super(name);
       }
       @Override
       public void eat() {
           System.out.println(super.getName() + " is eating dog food.");
       }
       public void bark() {
           System.out.println("The dog is barking.");
       }
   }
多态

多态表示一个对象具有多种的状态,具体表现为父类的引用指向子类的实例。

多态的特点:

  • 对象类型和引用类型之间具有继承(类)/实现(接口)的关系;
  • 引用类型变量发出的方法调用的到底是哪个类中的方法,必须在程序运行期间才能确定;
  • 多态不能调用“只在子类存在但在父类不存在”的方法;
  • 如果子类重写了父类的方法,真正执行的是子类重写的方法,如果子类没有重写父类的方法,执行的是父类的方法

try-catch-finally如何使用?

  1. try块:用于捕获异常。其后可接零个或多个 catch 块,如果没有 catch 块,则必须跟一个 finally 块。
  2. catch块:用于处理 try 捕获到的异常
  3. finally 块:无论是否捕获或处理异常,finally 块里的语句都会被执行。当在 try 块或 catch 块中遇到 return 语句时,finally 语句块将在方法返回之前被执行。

代码示例:

try {
    System.out.println("Try to do something");
    throw new RuntimeException("RuntimeException");
} catch (Exception e) {
    System.out.println("Catch Exception -> " + e.getMessage());
} finally {
    System.out.println("Finally");
}

输出结果:

Try to do something
Catch Exception -> RuntimeException
Finally

注意:不要在 finally 语句块中使用 return! 当 try 语句和 finally 语句中都有 return 语句时,try 语句块中的 return 语句会被忽略。这是因为 try 语句中的 return 返回值会先被暂存在一个本地变量中,当执行到 finally 语句中的 return 之后,这个本地变量的值就变为了 finally 语句中的 return 返回值。


网站公告

今日签到

点亮在社区的每一天
去签到