异常与junit

异常

为了出现小错误,程序不会崩溃,而是继续执行(写代码的逻辑错误与语法错误不是异常)(代码健壮性)(不要滥用异常处理机制)

异常体系 Throwable类实现了Serializable接口

Error

jvm无法解决,jvm内部错误/资源耗尽等,【栈溢出】,【内存溢出】,程序会崩毁

Exception

空指针异常,读取不存在的文件,网络连接中断等,可以解决

运行时异常

java.lang.RuntimeException及其子类

运行时异常编译器不要求强制处理,一般是程序员逻辑错误,要自己避免其出现

运行时异常可以不做处理,全处理影响效率与可读性(编译器检测不出来)

【要知道的常见异常】

空指针异常,数学运算异常(整数/0等),数组索引越界异常,类型转换异常,

数据格式不正确异常(字符串转数字可能抛)

编译时异常

编译时异常编译器必须处理(编译器可以检测出来),用try-catch或throws

【要知道的常见异常】

找不到文件异常,找不到类异常,克隆异常

操作数据库查询表,操作文件,到了末尾发生异常,IO异常,参数异常

异常处理

try-catch-finally

捕获-自行处理,finally可没有

idea先选中代码,再ctrl+alt+t选中try-catch

注意:

异常发生,异常后面代码不会执行,而是进入catch块

异常不发生,catch块不会执行

无论如何finally都会执行(底层是有2部分的)

try-catch-finally后面的程序继续执行

多个catch,编译要求子类异常写在前面,父类写在后面(因为父类写前面,后面的catch没有意义)

可以有try-finally,不捕获,出现异常会直接崩,但是finally会执行【执行一段代码,不管发生什么,都要执行一段逻辑】

应用:让一个用户输入整数,不是,就一直输入 解决: while内try-catch try最后break

try-with-resource是专门用于资源引用的异常处理

throws

将异常抛出,交给方法调用者处理,最上面是jvm,jvm直接打印异常,中断程序

throws的类型可以是父类,也可以是多个

运行时异常没有处理,默认就是throws(编译异常必须处理的)

选一个就行,都写就没有必要了

子类重写父类方法,所要抛出的异常,要么与父类相同,要么是其异常子类【子类完全可以代替父类的】

自定义异常

自己设计异常类

继承Exception,那么就是编译异常

继承RuntimeException,那么就是运行异常(一般是这个,利用默认throws,比较方便)

应用:要求接收Person年龄在18-120,否则抛出异常

throw与throws

throws 异常处理的一种方式 方法声明处 后面跟异常类型

throws 手动生成异常对象的关键字 方法体中 后面跟异常对象

junit单元测试框架

直接运行/debug方法,不用写到main内

加@Test注解到方法上

alt+enter注解,导入依赖,一般是5.4.2版本

还可以debug单个方法

junit测试类,相对路径从模块名开始算的

//测试:黑盒测试 看不到代码,给参数输入,看输出是否达到预期

// 白盒测试 关注程序执行的具体流程 考虑代码是否严谨 算法是否高效等

//junit单元测试:白盒测试的一种

// 使用:1定义一个测试用例(测试类) 建议 类名 被测试类名+Test 测试用例所在包名建议 xxx.xxx.test

// 2定义测试方法 可以独立运行的方法 建议 方法名 test+测试方法名 返回值建议 void 参数列表建议 空参

// 3给测试方法加@Test注解 需要导入junit依赖

// 判定:因为输出结果一般看不出其测试性 所以一般不需要输出 用控制台判断 红色 失败 绿色 成功

// 需要输出判断用断言 Assert 类静态方法 assertEquals(期望值,结果值) 方法

// 对于重复操作:如IO中流的申请,释放,用注解定义方法 junit4版本

// @before 用于资源申请,所有测试方法(非测试方法?) 在执行前都会先执行这个方法 一般注解init()方法

// @after 用于资源释放,在执行测试方法后执行 测试方法报错,两个方法 尤其是close方法还是会执行 一般注释close()方法

// junit5用@beforeeach与aftereach

// 注意:这三个方法(before,test,after【都】必须是public且不能加static,否则编译不报错,但是junit不会运行

相关推荐
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸5 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象5 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了6 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·6 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic6 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王6 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康6 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神7 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
qq_327342737 小时前
Java实现离线身份证号码OCR识别
java·开发语言