Java 异常与错误

异常

java内的异常的超类是 throwable 类,其子类为 Exception 和 error

java 中的异常 == 出现错误,在程勋中出现了异常,java 运行机制规定必须解决异常 (捕获) 或必须 声明异常(抛给上一级处理)

java 中的异常又分为编译时异常和运行时异常;

  • 编译时异常(RuntimeException):由于代码内部出现语法错误
  • 运行时异常(Exception):由于用户在使用过程中传递了非法参数
  • 捕获

    关键字: try-catch-finally

    将可能出现异常的代码块放在 try 语句中,在 catch 语句中声明异常类型,若有多个 catch 语句,则异常类从小到大排序;最终在 finally 中的语句是经过异常处理后一定会执行的

      #### 形象例子
    

    买到过期的食品,需要处理之后,才能食用(夸张一点为了举栗子,勿抬杠 /手动滑稽 )

public class Demo04 {
	public static void main(String[] args){
		Person a = new Person();
		try {
			a.setAge(-10);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			a.show();
		}
		
	}

}

class Person{
	int age;

	public void setAge(int age) throws  Exception{
		if(age<0||age>100) {
			throw new Exception("年龄不合法");
		}
		this.age = age;
	}
	public int getAge() {
		return this.age;
	}
	public void show() {
		System.out.println("年龄为:"+this.age);
	}
}
  • 声明:

    关键字:throws , throw

    throw 用来抛异常,抛出异常后,程序提前结束,异常后的代码不执行

    throws 后可加入多个异常,各异常之间用 " , " 连接

    在出现异常的代码语句中向上一级抛出;若中途没有捕获代码,则最终抛给 JVM 处理;

    若抛给上一级,尽量抛给上一级能解决的异常问题,若不能解决,则考虑异常转换

    形象例子:

店铺店主因为有其他事,再三天内不能开店,张贴告示通知消费者

public class Demo04 {
	public static void main(String[] args)throws Exception {
		Person a = new Person();
		a.setAge(-10);
        //程序发生异常,提前结束,未执行 a.show() 方法
		a.show();
	}

}

class Person{
	int age;

	public void setAge(int age) throws  Exception{
		if(age<0||age>100) {
			throw new Exception("年龄不合法");
		}
		this.age = age;
	}
	public int getAge() {
		return this.age;
	}
	public void show() {
		System.out.println("年龄为:"+this.age);
	}
}
  • 自定义异常

    java 的异常机制不能解决实际项目中的一部分异常,所以需要我们自己编写符合实际需求的异常类

    自定义异常类通常继承异常类,具体继承那个类需按照实际需求,视情况而定

public class Demo04 {
	public static void main(String[] args) throws DemoException{
		Person a = new Person();
		a.setAge(-10);		
	}

}

class Person{
	int age;

	public void setAge(int age) throws  DemoException{
		if(age<0||age>100) {
			throw new DemoException("年龄不合法");
		}
		this.age = age;
	}
	public int getAge() {
		return this.age;
	}
	public void show() {
		System.out.println("年龄为:"+this.age);
	}
}

class DemoException extends Exception{
	public DemoException() {}
	public DemoException(String s) {
		super(s);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值