06-Java中的异常、垃圾回收机制

异常

Throwable类的继承体系,有两个直接子类ErrorExceptioin,如图
在这里插入图片描述

  • Error(错误类),Java运行时系统内部错误资源耗尽错误,修改程序本身不能恢复。
  • Exception(异常类),表示程序本身可以处理的错误。Java开发中进行的异常处理都是针对Exception及其子类

Tips:除了RuntimeException类及其子类表示运行时异常,Exception类下所有其他子类都用于表示编译时异常

异常的类型

编译时异常(checked异常)

除了RuntimeException类及其子类表示运行时异常,Exception类下所有其他子类都用于表示编译时异常。

  • try…catch 异常捕捉
  • throws抛出异常

运行时异常(unchecked异常)

RuntimeException类及其子类都是运行时异常。Java虚拟机会自动进行捕获,程序能编译通过,运行过程中报错

try…catch和finally

try {
    
    
	// 可能发生异常的语句
} catch(Exception 类或子类e) {
    
    
	// 对捕获的异常进行相应处理
}
finally {
    
    
	print("finally语句块,不论程序是否异常都会执行");
}

throws关键字

有时,我们并不明确或急于处理异常,Java允许将这种异常从当前方法中抛出。

...
public static int divide(int x, int y) throws Exception, xxxException {
    
    ...}
...

throw关键字

  • throw是用于方法体内,并且抛出一个异常类对象
  • throws用在方法声明处,用来指明方法可能抛出的多个异常
public class Exam27 {
    
    
    private static void printAge(int age) throws Exception{
    
    
        if (age <=0)
            throw new Exception("年龄小于0?");
        else
            System.out.println("age: "+age);
    }
    public static void main(String[] args) {
    
    
        int age = -1;
        try {
    
    
            printAge(age);
        } catch (Exception e) {
    
    
            System.out.println(e.getMessage());
        }
    }
}

自定义异常

“特殊情况,特殊处理”,Java允许自定义异常,但其必须继承Exception类或其子类。
自定义一个异常类:

public class DivideByMinusException extends Exception {
    
    
	public DivideByMinusException() {
    
     
		super(); // 调用Exception无参构造方法 
	}
	public DivideByMinusException(String mes) {
    
    
		super(mes);
	}
}

自定义异常类的使用:

public class Example29 {
    
    
    public static void main(String[] args) {
    
    
        try {
    
    
            int ret = divide(4, 0);
            System.out.println(ret);
        } catch (DivideException e) {
    
    
            System.out.println("捕获异常:"+e.getMessage());
        }
    }
    private static int divide(int x, int y) throws DivideException{
    
    
        if (y == 0) throw new DivideException("除数为0!");
        int ret = x / y;
        return ret;
    }
}

垃圾回收机制(GC)

JVM会自动回收垃圾对象所占用的内存空间。
一个对象在堆内存中运行的三种状态:

  • 可用状态:该对象有一个以上的引用变量在引用它。
  • 可恢复状态:该对象失去了所有引用变量,在系统调用所有的finalize()方法进行资源清理前,重新使一个对象被一个引用变量引用,则再次变为可用状态。
  • 不可用状态:对象失去了所有引用变量,且调用finalize后依然没有变成可用状态。

强制系统进行垃圾回收

  • 调用System.gc()

Tips:一个对象在彻底失去引用成为垃圾后不会立即被回收,而是暂时地保留在内存中,垃圾堆积到一定程度时,垃圾回收器就自动启动,强制回收也是如此。

小结

  • 了解了异常类的继承体系,为编写代码时养成好习惯。

  • Java中的垃圾回收机制。

猜你喜欢

转载自blog.csdn.net/qq_42899028/article/details/117517427