java异常入门,try、catch,throws 谁掉我谁就要
2018-01-23 本文已影响9人
在路上phper
我们在做程序时 经常会发生些不可描述的事情
通常分为两大类
1.error 譬如内存溢出 虚拟机错误 很严重
2.exception(我们重点讲解下这个)
这两个类全部继承于java.lang.Throwable...
异常有什么作用呢?为了便于理解 我们先模拟一个需求
先模拟一个用户登录类 创建一个类叫做UserService
如下图目录所示
image.png
第一个需求
首先要有个用户登录的方法 假设有一批人存在数据库当中 目前还没接触数据库 我们先创建一个数组 就先用普通方法模拟一下
假设用户名bhc 密码123代表登录成功
如果登录成功则需要记录登录成功日志 登录失败也要记录(用来记录失败登陆的人次)
UserService.java中代码如下
image.png
image.png
第二张图片控制台输出内容改为英文的,防止出现乱码
接下来前端在程序部分需要如何调用我们的方法呢?
在MyIndex里
image.png
运行结果
image.png
实际上在记录日志时候 日志结果有很多种情况 下面我们扩展一下
登录失败原因有很多
比如用户名不存在 用户名密码不匹配 账户已经被禁等情况
接下来我们写一个函数判断用户是否在数据库中(也就是演示的数组中)
image.png
然后再用户登录函数中首先要判断用户是否存在
修改代码如下
image.png
UserService代码总体如下
image.png
可以看出我们在UserLogin函数中有两处返回false 但是两者对应的日志含义是不一样的 我们记录日志的过程中要明确是什么原因登录失败的
但是又不能不反回false 这时我们就需要用到异常了
Exception是异常类的顶层类
接下来我们学习如何抛出异常 有抛出 同样也有接 就是处理过程
通过这个异常 我们就可以很方便的记录日志的内容 是密码错误 还是用户名不存在
抛出异常写法throw new Exception("userName is not exist"); //自定义异常
UserSerice代码如下
image.png
这时候代码发生改变
首先判断用户名存不存在 不存在则抛出异常 try里面内容则不继续往下执行 转到catch处理异常了
然后接下来在MyIndex.java文件中将定义的用户名改为如下内容
image.png
在bhc后面随便加了几个aaa 我们的数组中没有这个用户名
运行结果如下
image.png
在控制台中抛出了异常 和一些基本信息 不是一个错误 而是我们自己定义的异常
看到这里我们感觉这个异常还是没什么作用 仅仅是自己抛出了异常 自己做了处理 而我们希望在记录日志的时候自动帮我们日志信息加上异常信息
这时我们需要学习一个方法
throws :用于声明异常,并且传递异常 这个异常在我的方法里可以不处理 它需要标记在我们的方法旁边 如果外部有程序调用该方法 那么必须要处理这个异常 谁调用我谁就处理 我自己不管
接下来我们修改UserService里代码
image.png
MyIndex中代码如下
image.png
运行结果
image.png
我们在UserService里面的UserLogin方法 抛出异常 不处理 往下传递 传递到MyIndex文件里被try catch 方法接住了并进行处理
如果我们在代码里修改 用户名bhc 密码123456 可以看见输出结果
image.png
image.png
这样我们的代码就具备了一定的逼格。