public void func1() throws Exception1 {
public void func2() throws Exception2 {
try {
func1();
} catch(Exception1 e) {
throw new Exception2("...", e);
当我们面对函数抛出异常的时候,应该选择上面的哪种处理方式呢?
- 如果 func1() 抛出的异常是可以恢复,且 func2() 的调用方并不关心此异常,我们完全可以在 func2() 内将 func1() 抛出的异常吞掉;
- 如果 func1() 抛出的异常对 func2() 的调用方来说,也是可以理解的、关心的 ,并且在业务概念上有一定的相关性,我们可以选择直接将 func1 抛出的异常 re-throw;
- 如果 func1() 抛出的异常太底层,对 func2() 的调用方来说,缺乏背景去理解、且业务概念上无关,我们可以将它重新包装成调用方可以理解的新异常,然后 re-throw。
总之,是否往上继续抛出,要看上层代码是否关心这个异常。关心就将它抛出,否则就直接吞掉。是否需要包装成新的异常抛出,看上层代码是否能理解这个异常、是否业务相关。如果能理解、业务相关就可以直接抛出,否则就封装成新的异常抛出。
对于函数出错返回数据类型,有 4 种情况,它们分别是:错误码、NULL 值、空对象、异常对象。
(1)返回错误码:C 语言没有异常这样的语法机制,返回错误码便是最常用的出错处理方式。而 Java、Python 等比较新的编程语言中,大部分情况下,我们都用异常来处理函数出错的情况,极少会用到错误码
(2)返回 NULL 值:在多数编程语言中,我们用 NULL 来表示“不存在”这种语义。对于查找函数来说,数据不存在并非一种异常情况,是一种正常行为,所以返回表示不存在语义的 NULL 值比返回异常更加合理
(3)返回空对象:返回 NULL 值有各种弊端,对此有一个比较经典的应对策略,那就是应用空对象设计模
式。当函数返回的数据是字符串类型或者集合类型的时候,我们可以用空字符串或空集合替代 NULL 值,来表示不存在的情况。这样,我们在使用函数的时候,就可以不用做 NULL值判断。
(4)抛出异常对象
最常用的函数出错处理方式是抛出异常。异常有两种类型:受检异常和非受检异常。
- 对于应该用受检异常还是非受检异常,网上的争论有很多,但也并没有一个非常强有力的理由,说明一个就一定比另一个更好。所以,我们只需要根据团队的开发习惯,在同一个项目中,制定统一的异常处理规范即可。
- 对于函数抛出的异常,我们有三种处理方法:直接吞掉、直接往上抛出、包裹成新的异常抛出。
我们可以把函数的运行结果分为两类:一种是预期的结果,也就是函数在正常情况下输出的结果一种是非预期的结果,也就是函数在异常情况下返回的结果比在正常情况下,函数返回数据的类型非常明确,但是,在异常情况下,函数返回的数据类型却非常灵活,有多种选择。函数在异常情况下可以返回错误码、NULL 值、特殊值(比如 -1)、空对象(比如空字符串、空集合)等。每一种异常返回数据类型,都有各自的特点和适用场景。返回错误码C语言没有异常这样的语法机制,因此,返回错误码就是最常见的出错处理方式。而在Java、Pyt
这篇文章主要介绍了C语言中返回错误信息的相关函数用法总结,包括strerror()函数和perror()函数以及ferror()函数的使用,需要的朋友可以参考下
C语言strerror()函数:返回错误原因的描述字符串
#include
定义函数:
* strerror(int
errnum);
函数说明:strerror()用来依参数errnum 的错
输入复杂对象不再导致 java 空指针异常
这个怎么运作:
使用 Java 反射,我们构造了包含所有字段的对象图(如果类扩展了父类,则继承)。 我们使用深度优先搜索遍历,应用模板和访问者设计模式,我们定义在访问每个不同类型的属性(对象图的节点)时要执行的特定操作。
此实用程序检测循环并防止无限处理,因此可能有一个包含属性 B 的对象 A 包含另一个属性 A (A->B->C->A)
易于扩展,只需扩展 FunctorIF,并实现处理每个属性类型所需的任何逻辑,遍历器将相应地调用访问和处理方法
原始对象:一个不包含其他对象的简单对象,在 Java 中它可以是 String、Integer、BigDecimal、Date、Double、Boolean、...
复杂对象:包含任意数量属性的对象,这些属性可以是原始对象或集合(现在是列表),和/或另一个复杂
isObject ( { } ) ;
isObject ( Object . create ( { } ) ) ;
isObject ( Object . create ( Object . prototype ) ) ;
isObject ( Object . create ( null ) ) ;
isObject ( { } ) ;
函数处理结果返回的三种方法:传递引用,传递指针,放回值
一个问题是:设计C++函数传参时如何决定使用指针还是引用?
关于讨论在知乎上有一个比较好的回答:设计C++函数传参时如何决定使用指针还是引用
还有就是返回指针的形式来返回一个结果:
#include <iostream>
#include <unordered_map>
#include <unordered_set>
#include "glog/logging.h"
#include <gflags/gfl
通常我们有 3 种方式把错误信息传递给函数的调用者。1
第一种方式是函数用返回值来告知调用者是否出错。比如很多Windows的API就是这个类型。Windows中很多API的返回值为0表示API调用成功,而返回值不为0表示在API调用的过程中出错了。微软为不同的非零返回值定义了不同的意义,调用者可以根据这些返回值判断出错的原因。这种方式最大的问题是使用不便,因为函数不能直接把计算结果通过返回值赋值给其他变量,同时也不能把这个函数计算的结果直接作为参数传递给其他函数。
第二种方式是当发生错误时设置一个全局变量
函数运行结果分为两类,一类是预期的结果,一类是非预期的结果,也就是出BUG。那程序异常该如何返回呢?
正常情况下,函数返回的类型是确定的,但是在异常情况下,函数返回的类型就非常多了。总的来说有以下4种方式。
1. 返回错误码
在Java、Python等编程语言中,基本都用异常来处理函数出错的情况,极少会用到错误码。
2. 返回NULL
一般来说,NULL是用来表示“不存在”这种语义,如果是查询,生成某参数之类的函数,在失败的时候是可以返回NULL的。
但也有很多人
在 C 语言中,select 函数会
返回一个整数,表示调用 select 函数时发生的情况。如果
返回值等于 9,则表示发生了一个错误,这个
错误码 9 对应的错误为 EBADF,意思是“错误的文件描述符”。
这意味着在调用 select 函数时,其中一个文件描述符参数无效。可能的原因有:
传递给 select 函数的文件描述符参数超出了系统限制
传递给 select 函数的文件描述符参数已经关闭
编程中经常遇到空对象引用的异常,有时为了代码简洁我们可以这么写。 if ((gcList.DataSource as DataTable)?.GetChanges() != null)
//Do some thing
}注意上面的问题,如果gcList.DataSource是null的话,直接调用GetChanges()方法会异常,加上问号则为空时不再执行后面的方法。
根据您提供的引用内容,问题描述中的错误信息是来自于不同的领域和语言。其中引用显示的错误信息是来自于使用MySQL JDBC驱动连接数据库时出现的错误。错误提示显示服务器的时区值无法识别或代表多个时区,需要配置服务器或JDBC驱动程序来使用更具体的时区值。您需要在服务器或JDBC驱动程序的配置中设置'serverTimezone'属性来指定一个更具体的时区值以支持时区功能。
至于引用和引用,这是关于使用Java解析JSON和Android布局文件的代码片段,与问题中的错误信息不相关。
根据以上信息,无法准确判断问题的具体原因和解决方法。建议您提供更多相关的上下文信息,以便我们更好地帮助您解决部署错误的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [关于Caused by: com.alibaba.fastjson.JSONException: syntax error, expect }, actual ,](https://blog.csdn.net/u014786083/article/details/126711805)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [Caused by: java.lang.NumberFormatException: For input string: “?2130969371](https://blog.csdn.net/u013398960/article/details/116710467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [连接mysql报错Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time...](https://blog.csdn.net/zhangphil/article/details/126688271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]