异常
这是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 点请记住:
- 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有。
 - 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
 - 子类可以用自己的方式实现父类的方法。
 
继承的示例代码:
 //继承
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如何使用?
try块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。catch块:用于处理 try 捕获到的异常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 返回值。



















