当前位置: 首页 > 科技观察

Java:异常作为控制流?老板:躲开!避免!避免

时间:2023-03-14 10:19:10 科技观察

Java是一种通用的编程语言,它有许多不同的解决方案来解决一些特殊的问题。但是,既有需要遵循的最佳实践,也有一些仍然普遍使用的不良实践。使用异常作为控制流是这些常见的不良做法之一。避免使用这种方法的原因有两个:第一,它会降低单位时间内代码的响应性,代码会非常难以阅读。让我们通过以下示例了解如何将异常用于控制流。此代码的商业用例是:publicstaticintfindAge(Stringname){try{StringageAsString=findUser(name);returnageAsString.length();}catch(NameNotFoundExceptione){return0;}}privatestaticStringfindUser(Stringname){if(name==null){thrownewNameNotFoundException();}returnname;}如果用户向findAge方法提供非空名称,它将返回名称的长度。但是如果username为空,findUser方法会抛出NameNotFoundException,此时findAge方法会返回0。那么如何重构这段代码来避免异常呢?老实说,有很多方法可以做到,这里只是其中一种。publicstaticintfindAgeNoEx(Stringname){StringageAsString=findUserNoEx(name);returnageAsString.length();}privatestaticStringfindUserNoEx(Stringname){if(name==null){return"";}returnname;}为了找到异常对代码的影响性能,准备下面的代码,其中两个实现都执行了1000万次,在IntelCorei7-3630QMCPU上运行时花费了数千毫秒,除了异常。publicclassControlFlowWithExceptionOrNot{publicstaticclassNameNotFoundExceptionextendsRuntimeException{privatestaticfinallongserialVersionUID=3L;}privatestaticfinalintTRIAL=10000000;publicstaticvoidmain(String[]args)throwsInterruptedException{longstart=System.currentTimeMillis();for(inti=0;i