java 异常 最佳实践_处理Java异常的10种最佳实践

java 异常 最佳实践

在本文中,我们将看到处理Java异常的最佳实践。 用Java处理异常不是一件容易的事,因为新手很难理解,甚至专业的开发人员也可能浪费时间讨论应该抛出或处理哪些Java异常。 因此,最大的开发公司对如何使用它们有一套规则。

如果您是公司的新手,那么Java异常处理中各种状态的呈现方式可能会让您感到震惊。 本文将向您展示最重要的十个方面,您可以用来入门或改善异常处理。 异常是程序执行期间的异常情况。 因此,让我们讨论处理Java异常的最佳实践。

1.处理Java异常的最佳实践

1.1永远不要在catch块中使用异常

catch (NoSuchMethodException e) {return null;
}

永远不要返回“ null”而不是处理异常,它会消耗异常并永久使错误失败。 如果您不了解失败的原因,那么将来就无法阻止自己。

1.2声明您的方法可能抛出的特定检查异常

public void foo() throws Exception { //Incorrect way
}

始终尝试避免上面的代码,因为它可能完全出于拥有已检查异常的目的而造成缺陷。 有必要声明该方法可能引发的特定检查异常。 如果用户有许多已检查的异常,则用户必须将其覆盖在用户的异常中,并将信息附加到异常消息中,否则用户也可以使用代码重构。

public void foo() throws SpecificException1, SpecificException2 { //Correct way
}

1.3不要获取异常类,而是捕获特定的子类

try {someMethod();
} 
catch (Exception e) 
{
LOGGER.error("method has failed", e);
}

获取异常的主要问题是,如果用户稍后调用的方法将新检查的异常附加到其设计签名中,则开发人员希望用户必须处理特定的新异常。 如果用户的代码出现异常,它将永远无法理解该变化。 用户的代码错误,并且可能在运行时的某个时间点崩溃。

1.4永远不要上任何Throwable类

这是一个严重的问题,因为Java错误也可以是Throwable的子类。 错误是不可更改的条件,无法由Java虚拟机本身控制。 Java虚拟机甚至可能在任何错误时都不请求用户的catch子句。

1.5始终准确地覆盖自定义异常中的异常,以免丢失堆栈跟踪

catch (NoSuchMethodException e) 
{
throw new MyServiceException("Some information: " + e.getMessage());  //Incorrect way
}

上面的命令可能会损坏主要异常的堆栈跟踪,并且总是错误的。 正确的方法是:

catch (NoSuchMethodException e) {throw new MyServiceException("Some information: " , e);  //Correct way
}

1.6记录异常或抛出异常,但不要同时执行

catch (NoSuchMethodException e) {LOGGER.error("Some information", e);throw e;
}

如上面的代码所示,抛出和记录可能会在日志文件中导致多个日志消息。 对于试图浏览各种日志的开发人员,代码中的单个问题可能会造成最坏的情况。

1.7永远不要从finally块抛出异常

try {someMethod();  //Throws exceptionOne
}finally 
{cleanUp();    //If finally also threw an exception the exceptionOne will be lost forever
}

准确地说,高达cleanUp()永远不会引发异常。 在上述情况下,如果someMethod()引发异常,并且在finally块中,cleanUp()引发异常,则该方法之外的其他异常将消失,原始的第一个异常(正确的原因)将永远消失。

1.8始终仅捕获那些可以处理的异常

catch (NoSuchMethodException e) 
{
throw e; //Avoid this as it doesn't help anything
}

这是一个必不可少的概念,从不捕获任何异常,因此仅在可以处理任何异常的情况下捕获任何异常,才可以在该异常中提供其他上下文数据。 如果您不能在catch块中处理它,那么最好的建议是不要仅将其重新抛出就捕获它。

1.9不要使用printStackTrace()语句

完成代码后,切勿离开printStackTrace()。 很有可能是您的同事之一,他们最终将获得其中的堆栈跟踪信息,并且对其处理方式的知识完全为零,因为它不会附加任何上下文信息。

1.10如果您不打算处理异常,请使用finally块而不是catch块

try {someMethod();  //Method 2
} 
finally 
{cleanUp();    //do cleanup here
}

这也是一个好习惯。 如果在您的方法内部访问某个方法2,并且方法2引发一些您不想在方法1中处理的异常,但是仍然希望进行某些清除以防万一发生异常,那么请在finally块中执行此清除。 不要使用挡块。

正如我们所讨论的,java异常处理是必不可少的,并且有多种实践可以毫无问题地处理它们。 图片中出现的最新VPN应用漏洞是Google从其平台上删除了一些最佳VPN。 根据研究人员的说法,它具有支持中间人(MITM)攻击的危险漏洞,因此它仅允许黑客阻止提供商与用户之间的通信。 甚至将所有用户重定向到黑客的邪恶服务器,而不是真正的VPN服务器。 因此,谷歌删除了它们,以保护用户免受漏洞侵害。 Google确认这种类型的漏洞仍然存在,研究人员通过Google Play安全奖励计划(GPSRP)发布了结论。 GPSRP使安全分析人员可以发现安装次数超过1亿次的应用程序的漏洞。

2.结论

本文可帮助您获得有关处理Java异常的最佳实践的完整知识。 完全了解它是必不可少的,因为,正如我们所讨论的,对于初学者和有经验的开发人员而言,这个主题都很难。

我们还讨论了google和顶级VPN应用之间的问题,即Google从其下载平台中删除了许多VPN,并提供了有关VPN应用漏洞问题的完整信息。

翻译自: https://www.javacodegeeks.com/10-best-practices-to-handle-java-exceptions.html

java 异常 最佳实践

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

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

相关文章

Java NIO总结

一、NIO NIO是new IO,也是非阻塞IO。有Channel、Selector、Buffer、Pipe、FileLock等类。 Buffer在java.nio包 Channel、Selector、Pipe、FileLock等在java.nio.channels包 二、Channel通道 设置非阻塞configureBlocking(false); 注册选择器register(selector,…

java 不可变map_如何用Java创建不可变的Map

java 不可变map你好朋友, 在本教程中,我们将看到如何在Java中创建不可变的Map。 –不可变的类或对象是什么意思? –什么是不可变地图? –如何在Java中创建不可变的Map? 不变的类或对象是什么意思? 不可…

ToolProvider.getSystemJavaCompiler() return null 的解决方法

【1】利用java 编译器API 编译 普通的java文件 1.1)代码如下: package com.corejava.chapter10_2;import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.OutputStream;import javax.tools.JavaCompiler; import jav…

脚本错误和安全警报怎么解决_适用于应用程序错误的AWS警报

脚本错误和安全警报怎么解决监视对于任何实际应用都是关键的。 您必须知道正在发生的事情,并在发生问题时实时得到警报。 AWS为此提供了CloudWatch,并自动为您提供了许多指标。 但是,您必须定义一些自己的东西。 然后,您需要定义适…

java平台脚本+java编译器API

【0】README 0.1)本文文字描述转自 core java volume 2, 旨在学习 java平台脚本java编译器API 的 基础知识; ------------------------------------------------------------------------------ 【1】java平台的脚本 1)脚本语…

Java 多线程总结

一、多线程实现方式 (1)继承Thread类,覆盖run方法 (2)实现Runnable接口,覆盖run方法,将对象传人Thread对象中实现Runnable接口比继承Thread类所具有的优势: 1)适合多个相…

古巴比伦乘法_古巴:为生产做准备

古巴比伦乘法“它可以在我的本地机器上运行!” 如今,它听起来像模因,但是“开发环境与生产环境”的问题仍然存在。 作为开发人员,您应始终牢记,您的应用程序有一天将在生产环境中开始运行。 在本文中,我们将…

java编译器API——使用编译工具

【0】README 0.1)以下内容转自: http://suntips.iteye.com/blog/69002 0.2)for basic java compiler API, please visit http://blog.csdn.net/pacosonswjtu/article/details/50718494 1)当你需要更好的处理这些结果时,你可以使…

Java 线程同步总结

一、synchronized(1)synchronized方法 (2)synchronized块 二、Lock 注意:及时释放Lock锁,否则会出现死锁,通常在finally代码释放锁 (1)ReentrantLock 实现…

aws es方案_AWS Elasticsearch后模式

aws es方案碰巧我们在SaaS版本的LogSentinel上遇到了生产问题–我们的Elasticsearch停止了对新数据编制索引。 由于Elasticsearch只是辅助存储,因此没有数据丢失,但这给我们的客户带来了一些问题(他们无法在其仪表板上看到实时数据&#xff0…

java注解总结

【0】README 0.1)本文主要对 java 注解做总结; 【1】处理注解的级别 level1) 在运行期级别处理注解: http://blog.csdn.net/pacosonswjtu/article/details/50719361level2)在源码级别处理注解: http://b…

Java 类加载总结

一、类加载过程 装载链接验证准备解析初始化二、类初始化情况 1)创建类的实例,也就是new一个对象 2)访问某个类或接口的静态变量,或者对该静态变量赋值 3)调用类的静态方法 4)反射(Class.…

maven依赖管理_依赖管理和Maven

maven依赖管理Maven伟大而成熟。 几乎所有事物都总有解决方案。 您可能在组织项目上遇到的主要情况是依赖管理。 而不是每个项目都具有自己的依赖关系,您需要一种集中的方式来继承那些依赖关系。 在这种情况下,您可以在父舞会上声明托管依赖项。 在我的…

JavaBean 持久化

【0】README 0.1)本文文字描述转自 core java volume 2,旨在学习 JavaBean 持久化 的基础知识; 0.2)本文所有源代码荔枝均为原创; 0.3) for complete souce code, please visit https://github.com/pa…

apache kafka_Apache Kafka消费者再平衡

apache kafka消费者重新平衡决定哪个消费者负责某个主题的所有可用分区的哪个子集。 例如,您可能有一个包含20个分区和10个使用者的主题。 在重新平衡结束时,您可能希望每个使用者都从2个分区中读取数据。 如果关闭了这些使用者中的10个,则可…

Java 注解总结

一、注解定义 注解早在J2SE1.5就被引入到Java中,主要提供一种机制,这种机制允许程序员在编写代码的同时可以直接编写元数据。 二、元注解 Target 说明了被修饰的注解的应用范围,也就是被修饰的注解可以用来注解哪些程序元…

编译原理三大经典书籍(龙书 虎书 鲸书)

以下内容转自: http://blog.csdn.net/skymingst/article/details/7436892 1、龙书(Dragon book) 英文名:Compilers: Principles,Techniques,and Tools 作者:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman 中文名&…

两个时间之间是多少小时_那是两个小时我不会回来

两个时间之间是多少小时正如我之前关于linting主题所说的 ,花时间修改代码的好处很有限,因为自动工具告诉您这样做。 更糟糕的是,这些工具并非万无一失。 例如,我们一直在针对完美无害的try-with-resources构造周围的SpotBugs警告…

java的类载入器

【0】README 0.1)本文文字转自: 深入剖析tomcat, 旨在 理解 jvm 的类载入器; 【1】 jvm的类载入器相关 1)jvm 使用了3种类载入器来载入所需要的类:分别是引导类载入器(bootstrap class load…

Java 代理总结

一、代理 为其他对象提供一种代理以便控制对这个对象的访问。 (1)静态代理 (2)动态代理 1)JDK自带的动态代理 2)javaassist字节码操作库实现 3)CGLIB 4) ASM(底层…