try catch基本介绍。

深入理解try-catch异常处理及最佳实践
本文旨在帮助初学者了解如何在代码中合理使用try-catch块,通过实例解析常见异常场景并提供优化建议,以提高代码的健壮性和可维护性。
1:正在逐步尝试将try,catch加入代码中,所以此文新手适用。

try catch一般来说,使用在可能会出现异常的代码块。具体什么时候会出现异常,那需要知识和经验的积累。
一般情况下适用try catch的模块有:数据库操作,文件操作,网络通信操作和一些设备连接。因为这些地方最可能出现异常。

网络上说,try catch可能会影响效率。但影响是否可接受,这可能取决于软件的使用范围。比如待效率要求很高的软件,在可能的情况下,减少try catch的使用(但个人认为,不可能不使用)

建议:参考一下几条原则(注意“灵活”)
几条建议:
  ☆ 如果无法处理某个异常,那就不要捕获它。 
  ☆ 如果捕获了一个异常,请不要胡乱处理它。 
  ☆ 尽量在靠近异常被抛出的地方捕获异常。 能够底层处理的异常,不要放置到高层。
  ☆ 在捕获异常的地方将它记录到日志中,除非您打算将它重新抛出。 
  ☆ 按照您的异常处理必须多精细来构造您的方法。 
  ☆ 需要用几种类型的异常就用几种,尤其是对于应用程序异常。
  ☆ 把低层次的异常封装成层次较高程序员较容易理解的异常。
  ☆ 尽量输出造成异常的完整数据
  ☆ 尽量捕获具有特定含义的异常:比如SqlException,而不是简单地捕获一个Exception。

 1.尽量给CLR一个明确的异常信息,不要使用Exception去过滤异常

    2.尽量不要将try…catch写在循环中

    3. try尽量少的代码,如果有必要可以使用多个catch块,并且将最有可能抛出的异常类型,书写在距离try最近的位置

    4.不要只声明一个Exception对象,而不去处理它。这样做白白增加了Exception Handing Table的长度。

    5.使用性能计数器实用工具的“CLR Exceptions”检测异常情况,并适当优化


另外:如果不知道如何处理异常,那么最少打印日志,用来查看原因。

测试用例中,使用throw抛出一个派生类的Exception可以通过基类的Exception来获取。此用法可以在:传值,引用两种方式下使用。
希望可以探索原理。我可以理解指针获取,但无法理解传值和引用两种方式的获取。
java处理字符串“{"id": 7, "table": "alert_message_oa", "platform": "prjAprProc", "requestId": 1650140, "申请人": "黄莉", "所在公司": "集团公司", "所在部门": "业务中心", "流程编号": "ZHZHXM09202503050001", "流程说明": "", "申请日期": "2025-03-05", "相关流程": "", "相关附件": "", "紧急程度": "紧急", "项目名称": "竹子经销商放开二手车畅享60期", "项目优先级": "P0", "期望上线日期": "2025-03-10", "计划启动日期": "2025-03-14", "计划完成日期": "2025-03-14", "详细需求描述": "<div id=\"wea_rich_text_default_font\" style=\"font-family:微软雅黑;font-size:12;\"><p>       针对竹子战略性合伙人模式业务,特此申请四川、湖南、杭州、云南、广东,以及后期省份开通的竹子业务均恢复准新车(二手车)畅享客户的准入,请科技针对该经销商打开二手车畅享60期<br />                                               谢谢支持</p><p> </p></div>", "需求背景描述": "集团为控制风险,于2 月25日关闭了担保业务二手车畅享客户的准入;<br>现有竹子业务的0公里准新车业务(资方认定为二手车),实际按新车产品方案执行,且利润再增加10%,高收益覆盖高风险。<br>竹子常规二手车基本走民生助贷,不会走我司秒租贷产品;因0公里准新车民生助贷的评估价过低,故只这部分车辆业务会走秒租贷<br>     ", "预计项目成本": null, "预计项目工时(人/日)": "1"}”中的特殊符号
03-12
<!-- ==================== 主表单结构 ==================== --> <table align="center" border="0" cellpadding="0" cellspacing="0" class="tableForm" style="table-layout: fixed;"> <colgroup> <col width="80" /> <col /><!--hide4phone.start--> <col width="80" /> <col width="380" /><!--hide4phone.end--> </colgroup> <tbody> <tr> <td style="text-align: right;"> <span style="color: red;">*</span>Subject:</td> <td dbf.type="required" id="dbf.subject"> </td> <!--show4phone.start--> </tr> <tr><!--show4phone.end--> <td style="text-align: right;"> Status:</td> <td><span id="mapping.dbf.procXSource"> </span>       Responsor: <span id="mapping.dbf.responsorSource"> </span>       Participants: <span id="mapping.dbf.participantsSource"> </span></td> </tr> </tbody> </table> <div> </div> <!-- ==================== 页面标题 ==================== --> <div style="text-align: center;"> <h1><img src="../common/logo.png" /> [报价历史查询内勤用]</h1> </div> <div>[Design form here, based on the template below, or customized by yourself after the template removed]</div> <!-- ==================== 查询输入区域 ==================== --> <table align="center" border="0" cellpadding="0" cellspacing="0" class="tableListBorder" style="table-layout: fixed; width: 928px;"> <colgroup> <col width="130" /> <col /><!--hide4phone.start--> <col width="130" /> <col width="330" /><!--hide4phone.end--> </colgroup> <tbody> <tr> <td colspan="4" style="background-color: lightyellow;"> </td> </tr> <tr> <td class="fieldLabel" style="text-align: center; width: 147px;"><span style="color: red;">*</span> username</td> <td id="username" style="width: 210px;"> </td> <!--show4phone.start--> </tr> <tr><!--show4phone.end--> <td class="fieldLabel" style="text-align: center; width: 63px;"><span style="color: red;">*</span> id</td> <td id="ID" style="width: 254px;"> </td> </tr> <tr> <td class="fieldLabel" style="text-align: center;">项目名称</td> <td id="项目名称" style="width: 210px;"> </td> <td class="fieldLabel" style="text-align: center;">装置名称</td> <td id="装置名称" style="width: 254px;"> </td> </tr> <tr> <td class="fieldLabel" style="text-align: center;">Customer Name</td> <td id="CustomerName" style="width: 210px;"> </td> <td class="fieldLabel" style="text-align: center;">E-NO/序列号</td> <td id="ENO" style="width: 254px;"> </td> </tr> <tr> <td class="fieldLabel" style="text-align: center;">产品描述</td> <td id="产品描述" style="width: 210px;"> </td> <td class="fieldLabel" style="text-align: center;">Remark</td> <td id="Remark" style="width: 254px;"> </td> </tr> </tbody> </table> <!-- ==================== 查询结果表格容器 ==================== --> <div id="resultTableContainer" style="margin-top: 20px; padding: 0 10px;"><!-- 动态表格将插入到这里 --></div> <!-- ==================== 手机适配区域(可选)==================== --> <div class="slide4phone"> <table align="center" border="0" cellpadding="0" cellspacing="0" class="tableListBorder2" style="table-layout: fixed;"> <colgroup> <col width="460" /> <col width="140" /> <col /> </colgroup> </table> </div> <!-- ==================== 查询按钮 ==================== --> <div style="text-align: center; margin: 20px 0;">        <input id="idslist" name="idslist" type="hidden" />                                                                   <strong> <input id="check" name="check" onclick="clickData()" type="button" value="check个人记录" /> </strong></div> <!-- ==================== 移动端表格占位 ==================== --> <div class="slide4phone2" id="reptable"> <table align="center" border="0" cellpadding="0" cellspacing="0" class="tableListBorder2" style="width: 1300px;"> </table> </div> <script language="javascript"> function clickData() { // 获取输入框的值并添加通配符 % 用于模糊查询 var username = '%' + document.getElementById('username').textContent.trim() + '%'; var 项目name = '%' + document.getElementById('项目名称').textContent.trim() + '%'; var 装置name = '%' + document.getElementById('装置名称').textContent.trim() + '%'; var CustomerName = '%' + document.getElementById('CustomerName').textContent.trim() + '%'; var ENO = '%' + document.getElementById('ENO').textContent.trim() + '%'; var Remark = '%' + document.getElementById('Remark').textContent.trim() + '%'; var Product描述 = '%' + document.getElementById('产品描述').textContent.trim() + '%'; // 构建 SQL 查询语句(注意字段名表名需正确) var sqlQuery2 = "SELECT Subject,Status,申请人,申请日期,产品类别,其他,type,内勤,系统,customer,ProjectName,DeviceName,新产品,[E-NO/序列号],目标价,数量,产地,含税报价,HandlerRemark,Remark,描述 " + "FROM X_BPM_DWH_819 " + "WHERE ProjectName LIKE '" + 项目name + "' " + "AND DeviceName LIKE '" + 装置name + "' " + "AND customer LIKE '" + CustomerName + "' " + "AND [E-NO/序列号] LIKE '" + ENO + "' " + "AND Remark LIKE '" + Remark + "' " + "AND 描述 LIKE '" + Product描述 + "'"; // 调用后台服务获取数据(假设返回的是二维数组) eval("var arr=" + service("common.js", "getDbsRecords", sqlQuery2, "array")); // 清空之前的结果 var container = document.getElementById("resultTableContainer"); container.innerHTML = ""; if (!arr || arr.length === 0) { container.innerHTML = "<p>未找到匹配的数据。</p>"; return; } // 创建表格 var table = document.createElement("table"); table.className = "tableListBorder"; table.style.width = "100%"; table.style.tableLayout = "fixed"; table.setAttribute("border", "1"); table.setAttribute("cellpadding", "5"); table.setAttribute("cellspacing", "0"); // 添加表头(使用 arr[0] 的键作为列名,或手动定义) var thead = document.createElement("thead"); var headerRow = document.createElement("tr"); // 手动定义表头文字(与 SELECT 字段顺序一致) var headers = [ "Subject", "Status", "申请人", "申请日期", "产品类别", "其他", "类型", "内勤", "系统", "客户", "项目名称", "装置名称", "新产品", "E-NO/序列号", "目标价", "数量", "产地", "含税报价", "处理备注", "备注", "描述" ]; headers.forEach(function (text) { var th = document.createElement("th"); th.style.backgroundColor = "#f0f0f0"; th.style.textAlign = "center"; th.style.fontSize = "14px"; th.textContent = text; headerRow.appendChild(th); }); thead.appendChild(headerRow); table.appendChild(thead); // 添加数据行 var tbody = document.createElement("tbody"); arr.forEach(function (row) { var tr = document.createElement("tr"); for (var i = 0; i < row.length; i++) { var td = document.createElement("td"); td.style.padding = "5px"; td.style.fontSize = "13px"; td.style.wordBreak = "break-word"; td.textContent = row[i] || ""; tr.appendChild(td); } tbody.appendChild(tr); }); table.appendChild(tbody); // 将表格插入容器 container.appendChild(table); } </script> 修改代码 第二次按查询按钮后 会重置生成结果
09-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值