Java序谈之异常和异常处理

异常的分类

根类:Throwable

子类:Error

分析:Error是系统或数据库的错误,不是人为的

子类:Exception

分析:Exception是程序员人为的错误,不同于编写错误。

Exception分为RuntimeException和IOException,下面的FileNotFoundException就是IOException

常见的异常有哪些呢?用代码体现

1、空指针异常--NullPointerException

2、角标越界异常--ArrayIndexOutOfBoundsException

3、并发编程异常--ConcurrentModificationException

4、类型转换异常--ClassCastException

5、未找到指定文件异常--FileNotFoundException

6、算术异常--ArithmeticException

1、空指针异常

分析:本来指向堆中空间,之后不再指向

代码示例:

		int [] array = new int[10];
		array = null;
		System.out.println(array[2]);
2、角标越界异常

分析:一般出现在数组中,输出的角标大于(数组长度-1)

代码示例:

		int [] array = new int [10];
		System.out.println(array[10]);
3、并发编程异常

分析:在集合中,在for循环遍历或者迭代器遍历的时候,自己添加或者删除集合的元素

代码示例:

		ArrayList a1 = new ArrayList<>();
		a1.add(14);
		a1.add(14);
		a1.add(18);
		for (Integer integer : a1) {
			if(integer ==18)
				a1.add(8);
		}
4、类型转换异常

分析:在集合中,例如集合中存的是Person对象,之后强制转型成Animal类型对象

代码示例:

		ArrayList a1= new ArrayList();
		a1.add(new Person("wangning", 18));
		a1.add(new Person("ning", 18));
		a1.add(new Person("wang", 18));
		Animal a2 = (Animal)a1.get(0);
思考:这里需要一些规则,去规定集合中元素的类型,并且帮助解决向上转型和向下转型这两个繁杂的步骤,这时候泛型就出现了,要求存入的数据类型是泛型数据(Person),然后帮你向上转型,之后输出的直接是泛型数据(Person),这里帮助向下转型

5、未找到文件异常

分析:在给定File对象路径建立对象的时候,可能出现路径对应文件不存在的情况,需要使用exists()方法判断,使用File类中的getName()、getPath()等方法仍然能使用,但是一旦建立流对象操作File的时候,就会报错,File类操作的仅仅是路径,不管文件是否存在,如果不存在就新建,流类操作的是文件内容

代码示例:

		String s1 = "./io/1.txt";
		File file = new File(s1);
		System.out.println(file.exists());
		try {
			FileOutputStream f1 = new FileOutputStream(file);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		System.out.println(file.getPath());
6、算术异常

分析:当除数为0的时候发生算术异常

代码示例:

	public static int hh(int a , int b) {
		return a / b ;
	}

对于异常有哪些操作

1、throw、throws操作

注意:

①throw用于抛出自定义异常,throw后的语句不会执行,无论throw是放在catch中还是花括号中

②throws用在方法签名中(函数名和参数列表组成),声明抛出异常的类

③可以throw一个新的自定义异常类,但是需要继承异常类,实现有参和无参构造方法,有参继承父类构造方法

2、try和catch和finally操作

注意:

①try:用于执行可能会发生异常的语句

②catch:用于捕获异常,打印异常信息

③finally:用于在trycatch后一定执行的语句

捕获异常具体的步骤是什么?

①执行语句,发生异常

②产生异常对象

③异常对象返回给调用者

④如果调用者有try catch语句,到catch中匹配异常

⑤没有try catch返回给JVM打印错误信息

解析final和finally和finalize的区别?

final:修饰变量转变为常量,修饰类为不可继承类,修饰方法为不可重写方法

finally:用于在try catch最后执行,一定会执行

finalize:是基类Object类中的方法,所有对象都有的方法,用于在垃圾回收的时候调用

try catch finally代码示例

	public static int hh(int a , int b) throws Exception11{
		int c = 0;
		try {
			 c =  a / b ;
		} catch (ArithmeticException e) {
			System.err.println(e.getMessage());
		} catch (Exception e) {
			System.out.println(e.getMessage());
		} finally {
			System.out.println("wangning");
		}
		return c;
	}

throw throws代码示例:

	public static int hh(int a , int b) throws Exception11{
		if (a / b == 0 ) {
			throw new Exception11("hh");
		}
注意:方法签名中写上throws 异常类
自定义异常类代码示例:

public class Exception11	 extends Exception {
	private static final long serialVersionUID = 1L;
	public Exception11() {
		
	}
	public Exception11(String mesage) {
		super(mesage);
	}

try catch和 throw何用的代码示例:

	public static int hh(int a , int b) throws Exception11{
		int c = 0;
		try {
			 c =  a / b ;
		} catch (ArithmeticException e) {
			throw new Exception11("错了");
		} catch (Exception e) {
			System.out.println(e.getMessage());
		} finally {
			System.out.println("wangning");
		}
		return c;
	}




你可能感兴趣的:(Java)