JAVA异常机制

一、异常分类

  • RuntimeException 运行时异常
  •  CheckedException 已检查异常

二、RuntimeException运行时异常

解决办法是需要通过增加“逻辑处理来避免这些异常”

1、ArithmeticException异常:试图除以0

int i = 1/0;
System.out.println(i);

解决办法:

int a=0;
int i = 1/a;
if(a!=0) {
	System.out.println(i);
}

2、NullPointerException(空指针)异常

String str = null;
System.out.println(str.length());  //空指针,调用里面任何一个函数都会报异常

解决办法:

String str = null;
if(str!=null)
	System.out.println(str.length());

3、ClassCastException异常

class Animal{
	
}
class Dog extends Animal{
	
}
class Cat extends Animal{
	
}
public static void main(String[] args) {
    Animal a = new Dog();
	Cat c = (Cat)a; 
}

解决办法:

Animal a = new Dog();
if(a instanceof Cat) {  //判断a是否为Cat类
	Cat c = (Cat)a; 
}

4、ArrayIndexOutOfBoundsException异常

int[] arr = new int[5];
System.out.println(arr[5]);

解决办法:

int c = 5;
int[] arr = new int[c];
if(c<arr.length) {
	System.out.println(arr[5]);
}

5、NumberFormatException异常

String str1 = "123wq"; 
System.out.println(Integer.parseInt(str1));

解决办法:

String str1 = "123wq"; //数字格式化异常
Pattern p = Pattern.compile("^\\d+$");
Matcher m = p.matcher(str1);
if(m.matches())  //str匹配到数字的正则表达式才能够转化
    System.out.println(Integer.parseInt(str1));

三、CheckedException已检查异常 

  • throws方法并不需要处理发生的异常,而是向上传递给调用它的方法处理
  • 应根据异常规范在方法的首部声明该方法可能抛出的异常
  • 如果一个方法抛出多个已检查异常,就必须在方法的首部列出所有的异常之间以逗号隔开

 

四、自定义异常

public class Test04 {
	public static void main(String[] args) {
		Person Pr = new Person();
		Pr.setAge(-1);
	}
}

class Person{
	private int age;
	
	public int getAge() {
		return age;
	} 
	
	public void setAge(int age) {
		if(age<0) {
			throw new  IllegalException("年龄不能为负");
		}
		this.age = age;
	}
}

class IllegalException extends RuntimeException{
	public  IllegalException() {
		
	}
	
	public IllegalException(String msg) {
		super(msg);
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值