相关概念:
Java在运行过程中或编译过程中,难免会出现一些报错,导致程序运行的中断,这些报错其实指的就是异常。
异常的分类:
第一级类:Java中所有异常或错误的顶级父类都是:Throwable类。 第二级类:其中Throwable分为错误-error和异常-exception 两大类 error 指的是:错误,无法通过代码解决的错误。 exception指的是:异常,可以解决的错误。 第三级类 :error下的子类都叫做XxxError 和 exception下的子类都叫做XxxException
Exception详解:
Java中最常出现的就是异常,俗称BUG,没有 没有BUG的程序,如果某个程序没有BUG,那么说明这个程序是个垃圾程序。 异常又分为两大类:运行时异常和编译时异常。 运行时异常:指的是运行过程中才出现的异常。 编译时异常:指的是编译过程中就出现了异常。 编译过程:理解为代码写完后都没运行,就报错。 常见的运行时异常: 空指针异常(NullPointException) 数组越界异常(ArrayIndexOutOfBoundsException) 数字格式化异常(NumberFormatException) 算数运算符异常(ArithmeticException) 一般来说: 运行时异常不用去特意处理,而是通过仔细编写代码来避免这些异常。
空指针异常(NullPointException) 指的就是 某个对象是null。你还去调用它的属性或方法。 String str = null; System.out.println(str.length()); 数组越界异常(ArrayIndexOutOfBoundsException) 获取的元素下标超过了数组原有的最大长度 int a[] = {1,2,3,4}; System.out.println(a[4]); NumberFormatException 数字解析溢出 将非数字的字符串解析成数字 String str = "12/345";//假设用户从前台输入的这个数量 后台只能通过String接受 int num = Integer.parseInt(str);//将字符串转成数字 System.out.println(num); 算数运算符异常(ArithmeticException) 编译时异常:还没运行就报错了,根本就不让你运行 由于知识点的局限性,导致13章才能解除到大量的编译时异常。 暂时就以Class.forName("xxx");作为代替。 上述代码的意思:加载指定的类。 例如:常见面试题: 获取对象的几种方式: 1.通过new来获取 2.Class.forName 3.Object中的clone方法 4.序列化
需要去解决: 解决的方式分为2种 推荐用第二种
1.抛异常(甩锅)
直接在异常代码所在的方法的尾巴后面加上 throws XxxException 一般来说就加个throws Exception
甩锅:谁调用它,谁去解决它,如果是Main方法调用,则不解决了。
2.抓异常(当场解决)
如何抓异常(当场解决) 语法如下: try{ 可能出现异常的代码; }catch (可能出现的异常类 变量名){ 哪一行如果出现了异常就立即进入这里而非报错; } try { System.out.println("我没有出现异常"); Class.forName("com.yyzy.test.Student"); }catch(Exception abc) { System.out.println("我是异常出现了"); } 抓异常的升级版 /* try{ 可能出现异常的代码; }catch (可能出现的异常类 变量名){ 哪一行如果出现了异常就立即进入这里而非报错; }finally{ 不管有没有出异常,都要执行这里, } */
ps:try不能单独使用,要么跟catch一起 要么跟finally一起