减少 try-catch ,这样做才叫优雅!

如何减少try catch块的使用,精细方法介绍 上面的Assert断言方法是使用接口的默认方法定义的,然后有没有发现当断言失败后,抛出的异常不是具体的某个异常,而是交由2个newException接口方法提供。使用枚举类结合(继承)Assert,只需根据特定的异常情况定义不同的枚举实例,如上面的BAD_LICENCE_TYPE、LICENCE_NOT_FOUND,就能够针对不同情况抛出特定的异常(这里指携带特定的异常码和异常消息),这样既不用定义大量的异常类,同时还具备了断言的良好可读性,当然这种方案的好处远不止这些,请继续阅读后文,慢慢体会。 阅读详情
  • 情景引入

  • 导入

    • 问题

    • 异常统一处理

    • 出现的情景

  • 开发环境

  • 开发步骤

    • 创建自定义异常

    • 创建消息返回的包装实体

    • 定义一系列的枚举返回信息

    • 定义消息返回工具类

    • 定义异常统一处理类(重点)

    • 定义异常处理页面

  • 效果

    • 开发环境

    • 正式环境

  • 总结


情景引入

(我) 呼噜呼噜呼噜呼噜。。。。。。。。

(小白) 起床起床起床,,快点起床。。。

(我) 小白,又遇到什么事了,这么火急火燎的,年轻人,做事要稳重

(小白) 我遇到了一个很严重的问题,想让你指导指导我!

(我) 哎哟,这次这么虚心请教啦,那我不生气了,,你说,怎么了呢?

(小白) 就是,我在开发的过程中,因为是团队开发,所以,有时候逻辑就对不上,然后就会 莫名其妙的出现一些问题,并且显示的效果非常难堪,而且也不容易发现问题,每次都要查看后台才能知道问题,可是部署到服务器之后,都只能看Log日志来定位问题。

(我) 对呀,这项目开发本来就是一个团队的事情,这是很正常的事,有什么大惊小怪呢?

(小白) 所以,我想着,有没有什么办法,可以针对系统中的异常(未知和已知)能够友好的进行显示呢?这样,我们在交流的时候也相对更加方便呀,否则,总是看着一堆乱七八糟的错误,挺心烦的。

(我) 我好像理解了你的意思。你就是想着,能对系统中的异常能够友好显示或者说能方便你们团队开发嘛。

(小白) 对的对的,就是这么个意思。

(我) 这当然有了,而且你现在遇到的这个问题,其实在每个系统中都应该有进行处理,虽然它比较简单,但是不容小视,也有很多重要的东西的呢~那就好好听课吧!

(小白) 真开心,,,,,迫不及待了

导入

问题

针对Web项目来说,我们都知道,一般都是一个团队进行开发,而不会是一个人单打独斗,并且开发团队还有前后端的人员,那么有一定的规范就是必不可少的。

我们可能都遇到过一个问题,就是开发环境和正式上线的环境是有很大的差别的。开发环境是针对我们开发人员,而正式环境是一种以用户的角度来审视我们的整个系统。想想一个问题,如果遇到了我们在开发中没有碰到的异常,而用户却发现了,用户体验是不是会非常不好,而且这是我们的一个大忌。。

既然如此,我们也知道,开发过程中,有如此多的异常可能会出现,那么里面就包含着我们已经考虑到了的,然而还有一些隐藏的异常却是我们可能忽视的,所以,为了能够将那些潜在的异常不被用户直接发现,而影响用户体验,这---------异常统一处理,,,就必不可少!

异常统一处理
定义:

简单点说,就是针对我们系统中的异常,给予一定规范的处理结果。(比如,默认的情况,就是将异常堆栈信息直接打印到页面,然而这种是极其丑陋的)

出现的情景
  • 开发人员预测得到的自定义异常:在开发中,开发人员对某些可能出现的情形是可以预知的,这时候是一种主动处理的状态。

  • 开发人员无法预测的系统异常:在开发中,存在着开发人员无法全面思考到的异常,那么这时候就是一种潜在性的可能异常状态。

  • 前端和后台交互异常:由于前后端的分离,而且前后端的开发方向也存在着差异,那么就有可能导致异常的出现。

开发环境
  • windows 7 + 渣渣笔记本

  • IDEA + SpringBoot + Mybatis +Mysql

开发步骤

创建自定义异常

分析:在系统中,存在着系统异常和我们人为的自定义异常,所以,为了能够有效的针对不同异常进行处理,那么拥有我们自定义的异常类是非常有必要的。

package com.hnu.csapp.exception;

/**
 * @ Author     :scw
 * @ Description:自定义异常,为了区分系统异常和更方便系统的特定一些处理
 * @ Modified By:
 * @Version: 1
 */
public class MyException extends RuntimeException{
    //错误码
    private Integer code;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public MyException(String message) {
        super(message);
    }

    /**
     * 构造器重载,主要是自己考虑某些异常自定义一些返回码
     * @param code
     * @param message
     */
    public MyException(Integer code,String message) {
        super(message);
        this.code = code;
    }
}
创建消息返回的包装实体

分析:对于后台返回给前端的数据来说,我们很多情况都是返回的JSON格式的数据(当然,并不是局限于这一种),那么JSON是一种格式化的形式。

所以,我们应该有效的针对这样的形式来给予一定的返回规范,这样也方便前端对于我们返回数据的解析。

比如:很多情况一般是如下的格式:

{
  "retCode": 200,  //通过状态码可以得到消息是否返回正常,然后再决定是否去解析data域的内容
 "data": {        //返回的数据内容
 }
 "retMes": success  //返回的提示内容
 
}

所以,我们可以定义如下的类:

package com.hnu.csapp.exception;

/**
 * @ Author     :scw
 * @ Description:异常处理实体包装类,自己用泛型进行写,扩展性强点
 * @ Modified By:
 * @Version: 1
 */
public class Result<T> {
    //返回码
    private Integer code;
    //返回消息
    private String msg;
    //返回数据
    private T data;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
定义一系列的枚举返回信息

分析:在系统中,我们应该有统一的某些编码对应某些内容,这样能够方便开发人员进行及时的处理。

package com.hnu.csapp.exception;

/**
 * @ Author     :scw
 * @ Description:自定义一些返回状态码,便于本系统的使用,自己先定义如下的,有需要就后续补充
 * @ Modified By:
 * @Version: 1
 */
public enum ResultEnum {
    /**
     * 成功.: 200 (因为http中的状态码200一般都是表示成功)
     */
    SUCCESS(200,"成功"),

    /**
     * 系统异常. ErrorCode : -1
     */
    SystemException(-1,"系统异常"),

    /**
     * 未知异常. ErrorCode : 01
     */
    UnknownException(01,"未知异常"),

    /**
     * 服务异常. ErrorCode : 02
     */
    ServiceException(02, "服务异常"),

    /**
     * 业务错误. ErrorCode : 03
     */
    MyException(03,"业务错误"),
    /**
     * 提示级错误. ErrorCode : 04
     */
    InfoException(04, "提示级错误"),

    /**
     * 数据库操作异常. ErrorCode : 05
     */
    DBException(05,"数据库操作异常"),

    /**
     * 参数验证错误. ErrorCode : 06
     */
    ParamException(06,"参数验证错误");

    private Integer code;

    private String msg;

    ResultEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}
定义消息返回工具类

分析:对于消息的返回,这是一个非常普通的工作,所以,我们可以将其封装一个工具类,能够进行有效代码的封装,减少多余的代码

package com.hnu.csapp.exception;

/**
 * @ Author     :scw
 * @ Description:返回消息处理的工具类,主要是处理操作成功和失败的一些内容
 * @ Modified By:
 * @Version: 1
 */
public class ResultUtil {

    /**
     * 操作成功的处理流程
     * @param object
     * @return
     */
    public static Result getSuccess(Object object){
        Result result = new Result();
        //设置操作成功的返回码
        result.setCode(200);
        //设置操作成功的消息
        result.setMsg("成功");
        result.setData(object);
        return result;
    }

    /**
     * 重载返回成功的方法,因为有时候我们不需要任何的消息数据被返回
     * @return
     */
    public static Result getSuccess(){
        return getSuccess(null);
    }

    /**
     * 操作失败的处理流程
     * @param code 错误码
     * @param msg 错误消息
     * @param o   错误数据(其实这个一般都不需要的,因为都已经返回失败了,数据都没必要返回)
     * @return
     */
    public static Result getError(Integer code, String msg, Object o){
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        result.setData(o);
        return result;
    }

    /**
     * 重载,操作失败的方法(因为操作失败一般都不需要返回数据内容)
     * @param code
     * @param msg
     * @return
     */
    public static Result getError(Integer code, String msg){
        return getError(code, msg, null);
    }
}
定义异常统一处理类(重点)

分析:这是如何实现异常统一处理的关键地方,而且我也将不同的处理情形,进行了分开注释,所以,大家一定可以认真的看代码,我相信你一定能够明白。

package com.hnu.csapp.exception;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

/**
 * @ Author     :scw
 * @ Description:异常统一处理类,方便用户可以更加友好的看到错误信息
 * @ Modified By:
 * @Version: 1
 */
@ControllerAdvice
public class ExceptionHandle {
    //增加异常日志打印
    private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);
    //设置异常错误的页面
    public static final String DEFAULT_ERROR_VIEW = "error";
    /**
     * 以json的格式进行返回内容(开发环境一般个人是用这个比较好)
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Object handle(HttpServletRequest req, Exception e){
        //如果是自定义的异常
        if(e instanceof MyException){
            MyException myException = (MyException)e;
            return ResultUtil.getError(myException.getCode(),myException.getMessage());
        }else{
            //如果是系统的异常,比如空指针这些异常
            logger.error("【系统异常】={}",e);
            return ResultUtil.getError(ResultEnum.SystemException.getCode(),ResultEnum.SystemException.getMsg());
        }
    }

    /**
     * 判断是否是Ajax的请求
     * @param request
     * @return
     */
    public boolean isAjax(HttpServletRequest request){
        return (request.getHeader("X-Requested-With") != null
                &&
                "XMLHttpRequest".equals(request.getHeader("X-Requested-With").toString()));
    }
    /*
    //备注:
    //这个是正式项目完成之后的错误统一处理(开发情况先用上面的的)
    //我们在开发过程中还是用json格式的会好一些,要不然看错误麻烦
    @ExceptionHandler(value = Exception.class)
    public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
        e.printStackTrace();
        //判断是否是Ajax的异常请求(如果是Ajax的那么就是返回json格式)
        if(isAjax(req)){
            //如果是自定义的异常
            if(e instanceof MyException){
                MyException myException = (MyException)e;
                return ResultUtil.getError(myException.getCode(),myException.getMessage());
            }else{
                //如果是系统的异常,比如空指针这些异常
                logger.error("【系统异常】={}",e);
                return ResultUtil.getError(ResultEnum.SystemException.getCode(),ResultEnum.SystemException.getMsg());
            }
        }else{
            //如果是系统内部发生异常,那么就返回到错误页面进行友好的提示
            ModelAndView mav = new ModelAndView();
            //这些就是要返回到页面的内容(其实不用都行,反正用户也不懂,没必要在页面显示都可以,先写着吧)
            mav.addObject("exception", e);
            mav.addObject("url", req.getRequestURL());
            mav.setViewName(DEFAULT_ERROR_VIEW);
            return mav;
        }
    }
    */

}
定义异常处理页面

分析:这个的话,其实主要是在正式环境才有,因为我们在测试环境的时候,一般都还是会将错误以JSON或者堆栈的格式显示在页面,而当上线的时候,那么就一定要有一个统一的错误页面,这样就能够让用户发现不了是系统出现了哪些问题。

效果

开发环境
a2c73688cce0b4c16981fd847f3af62e.png
正式环境

分析:当出现异常的时候,则显示如下的页面。(该页面是参考一个博友的,感觉挺有意思,,老司机~)

09cb7601a5ed32ac7f67736679c33508.png

总结

异常统一处理,或许我们看起来实现非常简单,然而,其他它包含的思想却是一种大局思想,这是我们开发人员在开发过程中都应该关注的点,我们并不是只需要关注我们每个人开发的那点任务,而要以一种全局的角度去审视整个项目,这样也能够提升我们开问题的高度。

异常统一处理,是每个项目都存在的,只是可能实现的方式不一样而已,或者显示的效果不一样而已,这些都不是关键的地方。

异常统一处理这个问题,并不是很难,但是这个可以帮助我们延伸到其他的一些相关的开发层面的知识,比如:

  • 登录拦截

  • 权限管理

  • 日志管理

  • 事务处理

  • 数据控制和过滤

  • 。。。

所以,我们应该学会从一个问题,发散的看到相关类似的问题,这样,我们的系统才会更加健壮,高效和可扩展性强。

来源:blog.youkuaiyun.com/Cs_hnu_scw/article/

details/85097972

Windows 10/11系统下TurboDesign 6.4.0完整安装指南(附序列号+破解补丁) 本文提供Windows 10/11系统下TurboDesign 6.4.0的完整安装指南,涵盖系统环境预检、安装程序部署、序列号处理及破解补丁部署等关键步骤。通过详细的安装教程和优化配置,帮助用户高效完成这款涡轮机械设计软件的安装与调试,解决常见兼容性问题。 阅读详情

相关推荐

二进制、八进制、十六进制、十进制转换详解

二进制是计算机的语言,正如我们使用汉语表达与交流信息一样,任何信息在计算机中都以二进制的形式存储和计算。了解二进制与十进制等进制之间的转换方法,有助于我们了解计算机内部的数字计算过程,可以帮助我们在一定程度上理解信息在计算机中的编码和解码过程。本文先简单介绍位置化数字系统的概念,然后详细讲解二进制、八进制、十六进制、十进制之间的转换方法与原理。

2301_81674797的博客 2098

java try catch块_如何优雅的实现 try catch 异常块?

来源:小明的学习笔记博客地址:www.cnblogs.com/liruilong/p/13403963.html在项目中,我们会遇到异常处理,对于运行时异常,需要我们自己判断处理。对于受检异常,需要我们主动处理。但是繁琐的try{}catch嵌套在代码里,看着很不舒服,这里我们不讨论性能,就代码来讲,来看看如何将他隐藏起来。原理是不变的。变得是写法。下面我们来看如何优雅的处理异常块。在这之前。你需...

weixin_35455135的博客 578

Cursor锁机了怎么办?实测这个开源插件帮你无限“续杯”,附详细安装与防踩坑指南

本文提供了Cursor锁机问题的详细解决方案,包括使用开源插件`cursor-fake-machine`修改机器标识、锁定配置文件权限以及优化使用规范。同时介绍了如何利用Cursor开发油猴脚本将微信公众号文章高效转换为Markdown格式,提升内容创作效率。

weixin_26805597的博客 768

如何优雅的处理Java异常?这9个最jia实践或许对你有帮助

Java中应该如何处理异常,这个话题看似简单,不就是try...catch嘛,但是往往BUG更容易出现在一些简单地、我们更容易忽略的地方。 大多数成熟的开发团队对于如何进行异常处理都有一套规范和最佳实践。 本期内容我整理了一些在我的团队正在使用的9个最佳实践,希望能让你对异常处理有所帮助。 1、使用finally或try...with...resource关闭资源 如果我们在try代码块中需要使用到一些资源,比如InputStream,在使用完之后我们需要将资源关闭。 这是一个错误示例 pub

欢迎来到我的博客 935

水文预报新手别怕!用Matlab 18小时搞定马斯京根法参数K和x(附完整代码)

本文详细介绍了如何使用Matlab在18小时内快速掌握水文预报中的马斯京根法参数K和x的求解方法。通过完整的代码示例和分步解析,帮助新手从理论到实践快速跨越,解决传统手工试算耗时耗力的问题,提升水文预报的效率和精度。

weixin_42573113的博客 259

ArcMap投影变换避坑指南:为什么你的坐标转换总出错?常见问题解析与解决方案

本文深入解析ArcMap中坐标转换与投影变换的核心区别与常见陷阱。针对坐标转换总出错的问题,从混淆“定义投影”与“投影变换”、栅格数据重采样选择、矢量数据地理变换参数设置等关键环节,提供清晰的避坑指南与实战解决方案,帮助用户确保空间数据的精确匹配。

weixin_29210727的博客 357

从阿里跳槽来的工程师,写个try catch的方式都这么优雅!

设计一套异常层次结构,定义基本的异常类,并根据业务逻辑创建具体的异常子类。:在捕获到异常时,应该记录详细的日志信息,包括异常发生的上下文环境、异常的类型以及堆栈跟踪信息等。:在异常处理过程中,确保所有打开的资源(如文件、数据库连接等)都被正确关闭,并尝试进行必要的恢复操作,以保证系统的稳定性。:定义一个全局的异常处理机制,用来捕捉程序中未被捕获的异常。在编程中,“优雅”的代码通常指的是那些既简洁又高效,同时易于理解和维护的代码。:收集异常发生的数据,分析异常发生的频率和类型,为优化系统提供依据。

qq_33240556的博客 675

开坑!双向逆变电源实操系列--第一节PFC

文章摘要 本文介绍了PFC(功率因数校正)的基本概念及其重要性。PFC电路通过储能和功率因数校正两大功能,解决交流电小电压大电流的问题,并减少无功电流损耗。文章对比分析了无源PFC(电感串联式、填谷式、LC谐振式)和有源PFC(升压型、交错并联、图腾柱式)的拓扑结构及适用场景。针对2400W双相逆变电源设计,作者选择图腾柱PFC拓扑,详细阐述了设计思路,包括电气参数计算、性能指标设定、技术重点及风险预判。文章还提供了主电路参数定制计算方法,如BOOST电感值的推导过程,为电源工程师提供实用参考。

lyzh971103的博客 2551

Java中try{}catch的隐藏(如何优雅的实现异常块)

人的黄金岁月就那么几年,如果你总是浅尝辄止,追求速成,随着年龄的增加,你的竞争力会不断下降,人也会慢慢废掉

山河已无恙 2195

Android 系统状态栏中实现高斯模糊背景

至此,我们已经完成了在 Android 系统的 SystemUI 中实现高斯模糊背景的过程。通过以上的布局和代码修改,我们可以在状态栏中看到具有高斯模糊效果的背景。同时,为了在不同版本的 Android 系统上适配高斯模糊效果,可能需要进行一些额外的代码调整和兼容性处理。希望本文能够帮助你理解如何在 Android 系统的 SystemUI 中实现高斯模糊背景,并通过提供的源代码进行相应的开发和调试。首先,我们需要在 SystemUI 的布局文件中添加一个用于展示高斯模糊背景的视图。属性来开启模糊效果。

CyberSparkZ的博客 871

【无人机基站】基于K-mean算法实现无人机基站部署附matlab代码

【无人机基站】基于K-mean算法实现无人机基站部署附matlab代码

天天酷科研的博客 246

别再写满屏的 try catch 了!这样写更优雅

背景 软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码中就会出现大量的try {...} catch {...} finally {...} 代码块,不仅有大量的冗余代码,而且还影响代码的可读性。 比较下面两张图,看看您现在编写的代码属于哪一种风格?然后哪种编码风格您更喜欢? 丑陋的 try catch 代码块 优雅的Controller 上面的示例,还只是在Controller层,如果是在Service层,可能会有更多的try catch

zhaoyajie1011的博客 2463

【云原生技术】SonarQube 生态中PMD插件和P3C插件详细介绍

4. 在项目中如何选择 / 组合 1. 小团队、对《阿里规约》认同度高 → 直接启用 **P3C**,配合 SonarJava 基本够用。 2. 追求全面 Bug/安全检测 + 额外编码规范 → **SonarJava + PMD**(必要时加 P3C 少量规则)。 3. 大型多团队,希望“一本规约”统一风格 → **P3C 为主**,再补充 SonarJava/PMD 的 Bug 与安全规则。 4. 通过 Quality Gate 控制:将 **Blocker/Critical** Bug

weixin_46453070的博客 1366

【优雅编码系列】之减少 try catch的使用

​​Spring​​在3.2版本增加了一个注解​​,可以与​​、​​、​​ 等注解注解配套使用,对于这几个注解的作用,这里不做过多赘述,若有不了解的,可以参考Spring3.2新注解@ControllerAdvice,先大概有个了解。不过跟异常处理相关的只有注解​​,从字面上看,就是异常处理器的意思,其实际作用也是:若在某个​。

kangbin825的专栏 1050

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

减少 try catch ,可以这样干

点击“终码一生”,关注,置顶公众号每日技术干货,第一时间送达!软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码中就会出现大量的 代码块,不仅有大量的冗余代码,而且还影响代码的可读性。比较下面两张图,看看您现在编写的代码属于哪一种风格?然后哪种编码风格您更喜欢?丑陋的 try catch 代码块优雅的Controller上面的示例,还只是在层,如果是在层,可能会有更多的代码块。这将会严重影响代码的可读性、“美观性”。所以如果是我的话,我肯定偏向于

终码一生 5540

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

减少try catch ,可以这样干!

作者:巨人大哥来源:cnblogs.com/jurendage/p/11255197.html背景软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理...

JAVA葵花宝典 641

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

这么做可以减少 try catch

使用 断言 和 枚举类 相结合的方式,再配合统一异常处理,基本大部分的异常都能够被捕获。类定义一个异常处理方法,并在方法上添加该注解,那么当出现指定的异常时,会执行该处理异常的方法,其可以使用springmvc提供的数据绑定,比如注入HttpServletRequest等,还可以接受一个当前抛出的Throwable对象。,就能够针对不同情况抛出特定的异常(这里指携带特定的异常码和异常消息),这样既不用定义大量的异常类,同时还具备了断言的良好可读性,当然这种方案的好处远不止这些,请继续阅读后文,慢慢体会。

2301_76936922的博客 216

干掉 try catch !

点击上方玉刚说,选择设为星标优质文章,及时送达作者:巨人大哥链接:cnblogs.com/jurendage/p/11255197.html背景软件开发过程中,不可避免的是需要处理各...

singwhatiwanna 520

干掉满屏的 try-catch,这样写太香了!

Slf4j@Component@ControllerAdvice@ConditionalOnWebApplication@ConditionalOnMissingBean(UnifiedExceptionHandler.class)public class UnifiedExceptionHandler { /** * 生产环境 */ private final static String ENV_PROD = "prod";

m0_71777195的博客 8728

减少 try catch ,可以这样干!

上一篇:当了20年的程序员,赚了1053万!软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码中就会出现大量的try {...} catch {...} finally {...}代码块,不仅有大量的冗余代码,而且还影响代码的可读性。比较下面两张图,看看您现在编写的代码属于哪一种风格?然后哪种编码风格您更喜欢?丑陋的 try catc...

Java和Android架构 219
上一篇: IDEA 官宣全新默认 UI,太震撼了!!
下一篇: IDEA 又出新神器,一套代码适应多端!
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值