异常

异常:
程序在运行过程中出现的特殊情况。
异常处理的必要性:
任何程序都可能存在大量的未知问题、错误;如果不对这些问题进行正确处理,则可能导致程序的中断,造成不必要的损失。
异常的分类:
Throwable:可抛出的,一切错误或异常的父类。位于java.lang包中。
Error:JVM、硬件、执行逻辑错误,不能手动处理。
Exception:程序在运行和配置过程中产生的问题,可处理。
RuntimeException:运行时异常,可处理,可不处理。
CheckedException:受查异常,必须处理。
异常的产生:
自动抛出异常:当程序在运行时遇到不符合规范的代码或结果时,会产生异常。
手动抛出异常:throw new 异常类型(“实际参数”);
一旦产生异常结果:相当于执行return语句,导致程序因异常而终止。
异常的传递:
按照方法的调用链反向传递,如果最终都没有处理异常,最终交由我们的JVM进行默认异常处理(打印堆栈跟踪信息)
受查异常:
throws 声明异常,声明位置:修饰在方法参数列表的后端。
运行时异常:
因其可处理,可不处理,无需声明。
异常的处理:
1)try{ }catch(){}
2)try{}catch(){}catch(){}
3)try{}catch(){}finally{}
4)Try{}catch(){}catch(){}finally{}
5)try{}finally{}
注意:多重catch下,遵循从子到父的顺序,父类异常在最后捕捕获
自定义异常
继承Exception(受查异常)或Exception的子类。
常用RuntimeException.(运行时异常)
必要提供的内容:
1).无参构造方法
2)String message参数的构造方法。定义异常原因信息
异常方法覆盖:
方法名、参数列表、返回值类型必须和父类相同
子类的访问修饰符和父类相同或比父类更宽泛
子类中的方法,不能抛出比父类更宽泛的异常
扩充:方法执行中字节码操作指令:
反编译:javap -verbose 文件名称(是.class) > 自定义文件名称.bytecode

作业:
5、6:

public class TestMyException {
	public static void main(String[] args) {
		int n;
		n = 1;
		try {
			m(n);
		} catch (MyException1 ex1) {
			System.out.println(ex1.getMessage());
		} catch (MyException2 ex1) {
			System.out.println(ex1.getMessage());
			throw new MyException2();
		}
	}

	public static void m(int n) throws MyException1 {
		if (n == 1) {
			throw new MyException1("n == 1");
		} else {
			throw new MyException2("n == 2");
		}
	}
}

class MyException1 extends Exception {
	public MyException1() {
	}

	public MyException1(String str) {
		super(str);
	}
}

class MyException2 extends RuntimeException {
	public MyException2() {
	}

	public MyException2(String str) {
		super(str);
	}
}

8、

importjava.io.IOException;
class super{
	public void ma() throws IOException {}
}
interface IA {
	void mb();
}
public class MySub extends Super implements IA{
	public void ma();//1
	public void mb();//2
}
//1:AB  2:D
/**在1处,填入以下______代码可以编译通过,在//2处,填入______代码可以编译通过。
 * A.throwsjava.io.IOException
 * B.throwsjava.io.FileNotFoundException,java.io.EOFException
 * C.throwsjava.sql.SQLException
 * D.不能抛出任何异常。
 */

10、

public class TestFanilly {
	public static void main(String[] args) {
		System.out.println(ma());
	}

	public static int ma() {
		int b;
		b = 0;
		try {
			int n = 100;
			return n / b;
		} catch (Exception e) {
			return 10;
		} finally {
			return 100;
		}
	}
}
/**
 * 当b =0时打印100 b = 100时打印100
 */

12、

importjava.io.*;
class MySuper {
	public void m() throws IOException {
	}
}

class MySub extends MySuper {
	public void m() throws EOFException {
	}
}

class MySub2 extends MySub {
	public void m() throws FileNotFoundException {
	}
}/**
	 * 以上代码是否能编译通过?如果不能,应该如何修改? 无法通过,异常重写方法应等于父类或小于父类异常范围
	 * 
	 */
importjava.io.*;

class MySuper {
	public void m() throws IOException {
	}
}

class MySub extends MySuper {
	public void m() throws EOFExceptior {
	}
}

class MySub2 extends MySub {
	public void m() throws FileNotNotFoun {
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值