概要图

异常讲解流程图

一 java 异常和错误层次图

1.1 图1

1.2 图2

二 异常生的过程

1 异常可以结束函数.

  同时也让程序结束了.

三 异常和错误的发生和区别

Java运行时期发生的问题就是异常。

Java中运行时发生的除了异常Exception还有错误Error。

异常:通常发生可以有针对性的处理方式的。如:定义一个数组arr[3],但是你要访问第4个值 .就会发生数组index越界
错误:通常发生后不会有针对性的处理方式如:定义一个数组arr[1024*1024*1024] 发生内存不足
Error的发生往往都是系统级别的问题,都是jvm所在系统发生的并反馈给jvm的。
无法针对处理,只能修正代码。

3.1 异常

如:定义一个数组arr[3],但是你要访问第4个值 .就会发生数组index越界

3.2 错误

如:定义一个数组arr[1024*1024*1024] 发生内存不足

四 异常的的简单应用

异常的应用:

在编写程序时,必须要考虑程序的问题情况。
举例:卖水果功能需要传递钱参数,有可能有假币。
所以定义定义程序需要考虑程序的健壮性。

加入一些逻辑性的判断。

4.1 自己抛异常

class Demo
{
/*
对给定的数组通过给定的角标获取元素。
*/
int getElement(int[] arr,int index)
{
/*
jvm出了问题,自己打包对象并抛出。
但是它所提供的信息不够给力。想要更清晰,需要自己写。
它的抛出不满足我们的要求。准备自己抛
*/
// 自己写的
if(arr==null)
{
throw new NullPointerException("arr指向的数组不存在");
} if(index< || index>=arr.length)
{
// 2
//该条件如果满足,功能已经无法继续运算。这时 就必须结束功能,并将问题告知给调用者。这时就需要通过异常来解决。
//怎么用呢?
//1,创建一个异常对象。封装一些提示信息(自定义)。
//2,需要将这个对象告知给调用者。怎么告知呢?怎么将这个对象传递到调用者处呢?通过关键字throw就可以完成。 throw 异常对象;
//3,throw用在函数内,抛出异常对象,并可以结束函数。
throw new ArrayIndexOutOfBoundsException("错误的角标,"+index+"索引在数组中不存在");
} int element = arr[index];
return element;
}
}
测试
class ExceptionDemo3
{
public static void main(String[] args)
{
Demo d = new Demo();
int[] arr = {,,};
int num = d.getElement(null,); //arr指向的数组不存在
System.out.println("num="+num); System.out.println("over"); } }

4.2 小练习

 4.2.1 问题

public class Test {

    public static void main(String[] args) {
Person p = new Person("qq",-); } }
class Person
{
private String name;
private int age;
Person(String name,int age)
{
//加入逻辑判断。
if(age< || age>)
{ System.out.println("年龄数值错误");
return;//终止初始化。 }
this.name = name;
this.age = age;
}
//定义Person对象对应的字符串表现形式。覆盖Object中的toString方法。
public String toString()
{
return "Person[name="+name+",age="+age+"]";
}
}
结果

这样做虽然可以编译并运行看到提示消息,但是问题却没有发生,程序还在继续执行。并打印p对象。
这是不合理的。

4.2.2改进用异常处理

package test;

public class Test {

    public static void main(String[] args) {
Person p = new Person("qq", -); } } class Person {
private String name;
private int age; Person(String name, int age) {
// 加入逻辑判断。
if (age < || age > ) { throw new IllegalArgumentException(age + ",年龄数值非法"); // 这里发生了变化
}
this.name = name;
this.age = age;
} // 定义Person对象对应的字符串表现形式。覆盖Object中的toString方法。
public String toString() {
return "Person[name=" + name + ",age=" + age + "]";
}
}

结果

五 异常的自定义和体系

5.1 自定义异常思考

能不能定义一个符合我的程序要求的问题名称。

异常的信息都可以自定义,那么异常的名字是否可以定义呢?是否可以定义成更符合自己程序的阅读呢?

之前的几个异常都是java通过类进行的描述。并将问题封装成对象,这是符合面向对象思想。
其实:异常就是将问题封装成了对象。

所以我也准备对自己所需要的问题进行类的描述。

5.2 自己定义并抛出

package test;

public class Test {

    public static void main(String[] args) {
Person p = new Person("qq", -); } }
class NoAgeException{
NoAgeException(){}
NoAgeException(String message){}
} class Person {
private String name;
private int age; Person(String name, int age) {
// 加入逻辑判断。
if (age < || age > ) { throw new NoAgeException(age + ",年龄数值非法");
}
this.name = name;
this.age = age;
} // 定义Person对象对应的字符串表现形式。覆盖Object中的toString方法。
public String toString() {
return "Person[name=" + name + ",age=" + age + "]";
}
}
结果
 

5.3 自定义异常加上父类Throwable

class NoAgeException extends Throwable{
NoAgeException(){}
NoAgeException(String message){}
}
结果

5.4  自定义异常加上父类RunTimeException

加上super(message)得到结果

java-异常处理1的更多相关文章

  1. 札记:Java异常处理

    异常概述 程序在运行中总会面临一些"意外"情况,良好的代码需要对它们进行预防和处理.大致来说,这些意外情况分三类: 交互输入 用户以非预期的方式使用程序,比如非法输入,不正当的操作 ...

  2. java异常处理(父子异常的处理)

    我当初学java异常处理的时候,对于父子异常的处理,我记得几句话“子类方法只能抛出父类方法所抛出的异常或者是其子异常,子类构造器必须要抛出父类构造器的异常或者其父异常”.那个时候还不知道子类方法为什么 ...

  3. Java 异常处理

    异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用System.out ...

  4. 《转载》Java异常处理的10个最佳实践

    本文转载自 ImportNew - 挖坑的张师傅 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.nul ...

  5. JAVA 异常处理机制

    主要讲述几点: 一.异常的简介 二.异常处理流程 三.运行时异常和非运行时异常 四.throws和throw关键字 一.异常简介 异常处理是在程序运行之中出现的情况,例如除数为零.异常类(Except ...

  6. Java异常处理和设计

    在程序设计中,进行异常处理是非常关键和重要的一部分.一个程序的异常处理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度.试想一下,如果一个项目从头到尾没有考虑过异常处理,当程序出错从哪里寻 ...

  7. 深入理解java异常处理机制

       异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的 ...

  8. Java提高篇——Java 异常处理

    异常的概念 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用Syst ...

  9. java异常处理的设计

    有一句这样话:一个衡量Java设计师水平和开发团队纪律性的好方法就是读读他们应用程序里的异常处理代码. 本文主要讨论开发Java程序时,如何设计异常处理的代码,如何时抛异常,捕获到了怎么处理,而不是讲 ...

  10. java异常处理机制

    本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框 架,阐述了异常处理的基本原则.并且作者提出了自己处理一个大型应用系统 ...

随机推荐

  1. LUOGU P4027 [NOI2007]货币兑换 (斜率优化+CDQ分治)

    传送门 解题思路 题目里有两句提示一定要看清楚,要不全买要不全卖,所以dp方程就比较好列,f[i]=max(f[j]*rate[j]*a[i])/(rate[j]*a[j]+b[j])+(f[j]*b ...

  2. 06-6-es6模板字符串

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. python-web-selenium模拟控制浏览器

    用 selenium 模块控制浏览器 启动 selenium 控制的浏览器 from selenium import webdriver brower = webdriver.Firefox() br ...

  4. BaseController 的使用

    为了提现代码的高可用性,我们可以常见的把dao层进行抽取,service ,但是很少看见有controller的抽取,其实dao层也是可以被抽取的. 首先我们定义一个BaseController接口 ...

  5. 搭建一个Semantic-ui项目

    一.进入到项目目录 npm init 二.安装semantic-ui npm install semantic-ui --save 三.编译输出semantic-ui cd  ./semantic g ...

  6. JAXL连接Openfire发送房间消息

    使用composer形式安装的JAXL <?php require_once "vendor/autoload.php"; $client = new JAXL(array( ...

  7. 性能压测中的SLA,你知道吗?

    本文是<Performance Test Together>(简称PTT)系列专题分享的第6期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全 ...

  8. light oj 1084 线性dp

    #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> ...

  9. php 怎样判断一段字符 有没有经过 urlencode 处理

    有没有百分号 判断字符串 执行urldecode 之前和之后是否一致 一致就是没有经过urlencode 不一致就是经过urlencode的 自己方法:判断是否所有: if(strpos($cooki ...

  10. R语言建立回归分析,并利用VIF查看共线性问题的例子

    R语言建立回归分析,并利用VIF查看共线性问题的例子 使用R对内置longley数据集进行回归分析,如果以GNP.deflator作为因变量y,问这个数据集是否存在多重共线性问题?应该选择哪些变量参与 ...