目录
一、异常的介绍
异常是什么呢?在Java中书写代码时我们有时候会出现异常,这里的异常比如说编译时出现异常,可编译成功后运行代码又出现了异常。我们经常出现的异常有数组越界异常,空指针异常,除数为0异常等等。那我们为什么要学习关于异常的知识啊,就是为了在写代码时出现异常我们可以对此做出解决方法以及应对措施。
二、异常的使用
1:try...catch语句
使用该语句可以来捕获异常,将可能会出现错误的语句放在tyr语句后,出现什么错误就会执行对应错误的catch语句。
tyr{
可能出现异常的代码
}
catch(异常种类 e){
代码语句
}
....
package one; public class test { public static void main(String[] args) { int[] a= {1,2,3}; try { System.out.println(a[10]); }catch(ArrayIndexOutOfBoundsException e) { System.out.println("索引越界"); } catch(Exception e) { System.out.println("出现异常"); } System.out.println("程序末尾"); } }
1:catch语句可以写多个,但是异常父类,也就是说所谓的长辈一定是在最下面 辈分越高就越在下面,在try语句中如果出现了异常就马上跳转到对应的异常 catch语句中,执行相应的代码,后面的代码就不会再执行了 2:如果try中没有遇到问题,则执行try中的代码并不会执行任意的catch语句中的代码。 3:如果try中的异常没有被捕获,则默认被java虚拟机处理
2:异常的常用方法
public String getMessage() 返回次throwable的详细消息字符串 public String toString() 返回此可抛出的简短描述 publicvoid pirntStackTrace() 把异常的错误信息输出在控制台
package one; public class test { public static void main(String[] args) { int[] a= {1,2,3}; try { System.out.println(a[10]); } catch(Exception e) { System.out.print("print方法:"); e.printStackTrace(); String s=e.getMessage(); System.out.println("getMessage方法:"+s); System.out.println("toString方法:"+e.toString()); } System.out.println("程序末尾"); } }
3:抛出异常
throws 写在方法定义处,表示声明一个异常告诉调用者,使用本方法可能会有哪些异常 public void 方法() throws 异常名1,异常2...{ } 编译时异常:必须要写 运行时异常:可以不写 throw 注意:写在方法内。结束方法,手动抛出异常对象,交给调用者,方法中下面的代码 不再执行了 public void 方法(){ throw new NullPointerException(); }
4:自定义异常
自定义异常 (1)定义异常类 (2)写继承关系 (3)空参构造 (4)带参构造 一般继承的是下面两个类 RuntimeException:运行时异常 Exception:编译时异常
三、异常的具体实例
这里我觉得讲再多还不如写代码实操一下,给了一个需求:键盘录入一个人的姓名和年龄,姓名的长度在3-10之间,年龄的范围为18-40岁,超出这个范围是异常数据不能赋值,需要重新录入,一直到录到正确为止
public class nameexception extends RuntimeException{ public nameexception(String s) { super(s); } } public class ageexception extends RuntimeException{ public ageexception(String s) { super(s); } } public class Person { String name; int age; public Person() { } public Person(String name,int age) { this.name=name; this.age=age; } public void setname(String name) { int len=name.length(); if(len<3||len>10) { throw new nameexception(name+":姓名格式错误"); } this.name=name; } public String getname() { return name; } public int getage() { return age; } public void setage(int age) { if(age<18||age>40) { throw new ageexception(age+":年龄范围出错"); } this.age=age; } } public class test { public static void main(String[] args) { Scanner s=new Scanner(System.in); String name; int age; Person p=new Person(); while(true) { try{ System.out.print("请输入姓名:"); name=s.nextLine(); p.setname(name); System.out.print("请输入年龄:"); String sage=s.nextLine(); age=Integer.parseInt(sage); p.setage(age); break; }catch(nameexception e) { e.printStackTrace(); }catch(ageexception e) { e.printStackTrace(); } } System.out.println("姓名="+p.getname()+" 年龄="+p.getage()); System.out.println("程序运行结束"); } }