java开发原则_java开发中,大家处理异常的原则是什么,是如何处理的?

展开全部

最熟悉的陌生人:异常

395fdd8e542b8ec9860e32030fe5d179.png

异常的类e5a48de588b63231313335323631343130323136353331333361326365型Throwable

— Exception

—- RuntimeException

— Error

需要注意的是,RuntimeException及其子类不需要在方法签名中显示注明异常抛出。

例如:

void runtimeExceptionMethod1() {

throw new RuntimeException();

}

和:

void runtimeExceptionMethod2() throws RuntimeException {

throw new RuntimeException();

}

都可以,但是很多时候建议注明异常抛出。

异常的方法签名和子类

方法签名的异常定义等于或者是实际抛出异常的父类

void ioExceptionMethod1() throws IOException {

throw new IOException();

}

或者

void ioExceptionMethod2() throws IOException {

throw new FileNotFoundException();

}

都是可以的。

RuntimeException的特殊性

可以使用try-finally这种形式。

void runtimeExceptionMethod3() {

try {

runtimeExceptionMethod1();

} finally {

}

}

这个时候,不会处理异常,异常仍然会抛出给调用者。

异常处理分为两种方式:

1处理

2抛给调用者

最常见的形式:

try {

} catch(Exception e) {

}

如果有额外的硬件资源或者锁需要释放的时候,需要增加finally.

try {

} catch(Exception e) {

} finally() {

}

举几个例子:

第一个例子:文件流的使用和关闭:

File realFile = new File(dir, "laplace.demo");

FileOutputStream fos = null;

try {

fos = new FileOutputStream(realFile);

fos.write(data);

fos.flush();

} catch (Exception var9) {

var9.printStackTrace();

} finally {

Utilities.silentlyClose(fos);

}

第二个例子:锁的释放

Lock lock = null;

try{

lock = new ReentrantLock();

lock.lock();

// Some sentence may cause exception.

} catch (Exception e){

} finally {

if(lock != null){

lock.unlock();

}

}

处理的原则

在讲述了基本的原理后,讲解一下处理的原则。

调用者是否关心异常发生的后果

如果异常发生后,会要有不同的处理逻辑,那么被调用者应该将异常抛出。

作为sdk组件而言,本身无法知道纷繁复杂的需求,所以通常是需要将异常抛出,而不是自己处理。

对于业务层代码而言,更多时候需要考虑到借口的友善性,可能会做出异常的处理,而不是再向调用者抛出。

此外,还有一些Java规范基本的约定:

例如通常只建议处理Exception,而不建议处理Error。

但是在实际的产品过程中,只要不是完全不能运行的情况,我们希望给用户的感觉是,似乎发生了部分错误,但是整个程序还在运行,并没有奔溃。

所以,对于异常类型的实际处理,还取决于产品逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java8合并两个Map

合并两个Map map自己的方法 实现方式是通过 putAll() 方法将多个 map 对象中的数据放到另外一个全新的 map 对象中,代码如下所示,展示了两个 map 对象的合并,如果是多个 map 合并也是用这种方式。 public static void main(String[] args) {…

java 线程 spring_java中spring里实现多线程

Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程的可使用ThreadPoolTaskExecutor来实现基于线程池的TaskExecutor在实际开发中由于多是异步,所以使用EnableAsync来支持异步任务,且要在Bean的方法中使用Async来声明其是一个异步任务?????…

java8 Map新增方法的使用

文章目录 文章目录文章目录java8 Map新增方法的使用概述1、compute()1、使用2、源码实现2、computeIfAbsent()1、使用2、源码3、computeIfPresent()4、merge()1、使用2、源码5、接下来简单介绍一下1.8之后Map添加的default方法map新增的方法:getOrDefaultforEachput…

java自动识别验证码_Java使用OCR技术识别验证码实现自动化登陆方法

活动介绍缘起是 GitChat 作者群有一位作者提出是否应该定期组织一些写作活动,活跃一下社区氛围,刚好 GitChat 内容组的小伙伴们也有这个想法,既然想法碰到一起,那就说做就做。既然是第一期,那么我们就定一个比较广的主…

出现503错误 怎么办

展开全部 出现503错误原因及解决办法 原因:web服务器不能处理HTTP请求,可能是临时超载或者是服务器进行维护。 解决办法:用户需要等待服务器的临时处理。在这种状态下,一些服务器可以简单的拒绝socket连接,否则会发…

sql语句优化总结 mysql_MySQL-SQL优化总结

转载:https://blog.csdn.net/qq_39390545/article/details/107020686理解SQL优化原理 ,首先要搞清楚SQL执行顺序:SELECT语句 - 语法顺序:SELECTDISTINCT FROM JOIN ON WHERE GROUP BY HAVING ORDER BY LIMIT SELECT语句 - 执行顺序:FROM# 选取…

java枚举类中字段有没有必要加final____枚举类字段 Field ‘xxx‘ may be ‘final‘

java枚举类中字段有没有必要加final 今天在写一个系统统一返回码的枚举类时候,突然想到一个问题,当不小心手抖给枚举类自动生成了set方法,而恰巧在用的地方不小心用了set方法,从而修改了code值,由于枚举类是天然单例&a…

calcite连接mysql_calcite简单入门

1 介绍Apache Calcite是一款开源的动态数据管理框架,它提供了标准的 SQL 语言、多种查询优化和连接各种数据源的能力,但不包括数据存储、处理数据的算法和存储元数据的存储库。Calcite 之前的名称叫做optiq,optiq 起初在 Hive 项目中&#xf…

MySQL数据库索引及失效场景

文章目录1. MySQL索引概述1.1 索引的概念1.2 索引的特点1.3 索引的分类1.4 索引的使用场景2. 索引失效场景2.1 索引失效9种场景2.2 索引失效场景总结3. 索引失效验证3.1 全值匹配3.2 最佳左前缀3.3 索引计算3.4 索引范围:索引列上不能有范围查询3.5 索引覆盖&#x…

getLong java_java.lang.Long.getLong()方法实例

全屏java.lang.Long.getLong(String nm) 方法确定具有指定名称的系统属性的long值。如果没有具有指定名称的属性,如果指定名称为空或null,或者该属性没有正确的数字格式,则返回null。声明以下是java.lang.Long.getLong()方法的声明public sta…

@JsonProperty注解解析

1. 概述 来源: JsonPrpperty是jackson包下的一个注解,详细路径(com.fasterxml.jackson.annotation.JsonProperty;)作用:JsonProperty用在属性上,将属性名称序列化为另一个名称。例子:public class Person{JsonProperty(value "name&qu…

java内部类为什么使用很少_java内部类有什么好处?为什么需要内部类?

提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比。内部类从表面上看,就是在类中又定义了一个类(下文会看到&#xff…

jdk中提供的Collection、Collections、Collector、Collectors你分的清楚?

初次一看四个有点相似,而且有些时候一不小心还真有可能敲错,因为喜欢代码提示没仔细看提示,结果通过.去调用结果发现没有找到你想用的方法。所以写代码的时候需要注意一点这个区别 Collections.emptyList(); Collectors.toMap(......);//所在…

java swing panel问题_关于 Java swing Box 的使用问题

代码import javax.swing.*;import java.awt.*;public class C5Ex1_2 {final static int WIDTH 400;final static int HEIGHT 400;public C5Ex1_2() {JFrame jf new JFrame("program 1");jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setSize(WIDTH, HEI…

SpringMVC注解@RequestParam全面解析____ 注解@RequestParam如何使用加与不加的区别

SpringMVC注解RequestParam全面解析 在此之前,写项目一直用的是RequestParam(value“aa” requiredfalse)这个注解,但是并不知道它的意思。现在懂了,特来记录下。 1、可以对传入参数指定参数名 1 RequestParam Stri…

java编写流星_纯Java代码实现流星划过天空

废话不多说了,直接给大家贴java代码了。import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import javax.swing.JFrame;import javax.swing.JPanel;public class MeteorFly extends JFrame {final int MAX ; // (~)流星的个数f…

@requestbody和@requestparam到底什么作用

1、什么都不写 GET 可以自动封装为对象模型,没有的数值自动为0值 POST 请求体里面放了数据,但是还是使用了RequestParam里的数据 总结: 在不使用注解的情况下,相当于默认使用了RequestParam里的数据 (这种理解是错…

linux mysql学习_Linux学习笔记(MySql操作)

忘记MySql密码:编辑mysql主配置文件 my.cnf 在[mysqld]字段下添加参数 skip-grant重启数据库服务,这样就可以进入数据库不用授权了 mysql -uroot修改相应用户密码 use mysql;update user setpasswordpassword(密码) where userroot;flushprivileges; (刷新)最后…

注解@RequestParam【不添加默认项注解】与@RequestBody的使用场景

一、前言 一直有这么一个疑问:在使用postman工具测试api接口的时候,如何使用 json 字符串传值呢,而不是使用 x-www-form-urlencoded 类型,毕竟通过 key-value 传值是有局限性的。假如我要测试批量插入数据的接口呢,使用…

java新建对象校验_验证某个对象是否是一个mock对象或者一个spy对象

C**f回复了y**4在课程中的问题:final和自动装配...v**g添加了笔记:James Gosl...c**k向课程作业中提交了代码我**…向课程作业中提交了代码2**9在课程中提出了问题:谢谢回复。应该是网络...v**g在课程中提出了问题:里面的内容SESS…