异常(一)

异常


public static void main(String[] args) {
		int a = 1/0;
		System.out.println(a);
	}

抛出异常

程序执行某个方法的时候,出现异常,
就会使用这个方法生成一个代表该异常的一个对象,
停止程序的运行,并且交给JRE,来进行处理


捕获异常

JRE得到这个异常的时候,就会寻找相应的代码来处理该异常,
JRE在方法的调用栈里去查找,从生成异常方法开始回溯,
直到找到相应的异常处理代码为止


继承结构

无法检查的一些错误
运行时产生的异常
可处理的错误
Throable 接口
Error
Exception
Uncheck Exception
RuntimeException
Cheched Exception

抛出错误

第一步、将他给打包为一个该错误的对象
第二步、将错误交给他的调用者去处理
第三步、调用者可以去自己处理(try/catch),也可以继续去往上面去抛出

第N步、最后交给gre进行处理


例子

谁调用谁处理

public static void main(String[] args) throws IOException {}

我这里是在main()方法里面进行调用的,所以会让main()进行抛出

try/catch

	try {
			 * 异常的部分
		} catch (Exception e) {
			/*
			 *  u-toString ()方法,显示异常的类名和产生异常的原因
          	 *  u-getMessage()方法,只显示产生异常的原因,但不显示类名。
          	 *  u-printStackTrace()方法,用来跟踪异常事件发生时堆栈的内容。
      		 *  n-catch捕获异常时的捕获顺序:
             *u-如果异常类之间有继承关系,在顺序安排上需注意。
             *越是顶层的类,越放在下面,再不然就直接把多余的catch省略掉。 
             *也就是先捕获子类异常再捕获父类异常。
			 */
		}finally {
			/*n-有些语句,不管是否发生了异常,都必须要执行,那么就可以把这样的语句放到finally语句块中。
			 *n-通常在finally中关闭程序块已打开的资源,比如:关闭文件流、释放数据库连接等。
			 *即使try和catch块中存在return语句,finally语句也会执行。是在执行完finally语句后再通过return退出。
			 *finally语句块只有一种情况是不会执行的,那就是在执行finally之前遇到了System.exit(0)结束程序运行。
			 */
		}

例子:

		try {
			fr = new FileReader("E:\\操作文件\\jave.txt");
			char a = (char)fr.read();
			System.out.println(a);
		} catch (FileNotFoundException e) {
			System.out.println("无法找到文件");
		} catch (IOException e) {
			e.toString();
			System.out.println("无法读取文件");
		} finally {
			try {
				fr.close();
			} catch (IOException e) {
				e.printStackTrace();
				System.out.println("无法关闭文件");
			}
		}
	

结果:

Exception in thread "main" 无法找到文件
java.lang.NullPointerException
	at test_7.异常分类.tryCatch(异常分类.java:102)
	at test_7.异常分类.main(异常分类.java:39)

自定义异常

一般自定义的异常继承的是运行时异常(runtimeException),如果是其他的话(Exception),就会提示,是抛出还是try/catch

public class 手动自定义抛出异常 {
	public static void main(String[] args) {
		Person aa = new Person();
		aa.setAge(-1);
	}
}
class Person{
	private  int age;

	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		
		if (age <= 0) {
			throw new IliAgeException("年龄不可以小于零");
		}
		this.age = age;
	}
}
class IliAgeException extends RuntimeException{
	public IliAgeException() {}
	public IliAgeException(String msg) {
		super(msg);
	}
}

``

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值