if-else和try-catch

本文详细解析if-else语句与try-catch语句的功能、应用场景,强调两者本质上的不同,帮助开发者正确选择使用场景。

近来,在做机房收费系统,进度虽然很慢,但是问题不少,磕磕绊绊的。之前用VB做的完全没有考虑代码的合理性。不过这次从三层变七层(这里所说的七层是指增加外观模式和抽象工厂模式)。

开始的时候不知道if-else语句和try-catch语句有何区别,只看到表面的。起初我的理解是:如果....就....。感觉这两个语句实现的代码后的功能差不多呀。

if-else语句

首先要明确if-else语句是流程控制

if(表达式)

语句1;

else

语句2;

其语义是:如果表达式的值为真,则执行语句1,否则执行语句2

其过程表示如下图



try-catch语句

首先先要知道try-catch语句是异常处理

Try
  Catch ex As Exception
    Throw New Exception(ex.Message, ex)

  End Try

首先try是捕获异常的,既然是异常就是我们无法预测到的,是未知的,而if-else语句我们则是都可以做出判断的。

如果if-else可以做try-catch的事情,那么就不要用try-catch。

后来才知道这两个语句其实根本就没有联系。只不过自己一厢情愿让两个不同的语句硬要产生联系。(风马牛不相及呀!!!)

当不可预知有什么异常的时候,用try
当过多情况需要处理,用if就会太繁琐
当你需要观察的代码没有返回值的时候,if()当中没法作判断,必须用try

try…catch…应该属于程序结构中的顺序结构,虽然说在出现异常的时候编译器会跳到捕获异常的入口处,但这和传统意义上的if…else…结构存在根本性的差别.

下面在补充一个

if-elseif语句


读者只要看这两张图便可理解if-else和if-elseif的区别了。


### ### `try-catch` 与 `if-else` 的区别 #### #### 条件判断机制 `if-else` 是基于程序开发者设定的条件进行判断,根据条件的真假执行相应的代码块。条件是人为定义的,用于控制程序流程。例如,开发者可以设定某个变量是否为特定值来决定程序走向 [^1]。 `try-catch` 是基于程序运行过程中是否发生异常(系统生成的错误)进行判断。异常通常由程序执行时的意外情况引发,例如除以零、数组越界、文件不存在等。`try` 块中的代码用于测试,而 `catch` 块则用于处理这些异常 [^1]。 #### #### 错误处理方式 在 `if-else` 中,程序通过条件判断来处理不同的情况,错误处理通常嵌入在逻辑判断中。这种方式适合处理已知的、可预见的问题,例如输入验证或状态检查 。 在 `try-catch` 中,程序通过捕获运行时错误来处理异常。一旦 `try` 块中发生错误,程序将立即跳转到 `catch` 块,忽略 `try` 中错误之后的代码。这种方式适合处理不可预见的错误,例如文件读取失败、网络中断等 [^2]。 #### #### 代码结构可读性 `if-else` 结构将条件判断执行逻辑混合在一起。当多个条件嵌套时,代码可能会变得复杂且难以维护。例如,多个 `else if` 分支会导致逻辑分散,增加理解难度 。 `try-catch` 将正常逻辑异常处理逻辑分离,使代码结构更清晰。`try` 块专注于主要逻辑,而 `catch` 块专注于异常处理。这种分离有助于提高代码的可读性可维护性,尤其是在处理复杂任务时 [^1]。 #### #### 性能影响 `if-else` 的性能开销较小,因为它只是简单的条件判断,不涉及额外的异常堆栈操作 。 `try-catch` 的性能开销相对较大,特别是在发生异常时。这是因为异常处理机制需要捕获堆栈信息、创建异常对象并进行传递,这些操作会消耗额外的系统资源 [^1]。 #### #### 应用场景 `if-else` 适用于处理已知的、可预测的条件分支。例如,验证用户输入是否符合预期格式,或根据状态决定执行路径 。 `try-catch` 适用于处理运行时错误或不可预见的异常情况。例如,在文件操作中捕获文件读取失败、在数学运算中捕获除以零错误、在网络请求中捕获连接失败等 [^2]。 #### #### 示例对比 ##### `if-else` 示例: ```java int num1 = 10; int num2 = 0; if (num2 != 0) { System.out.println("Result: " + (num1 / num2)); } else { System.out.println("不能除以零"); } ``` 该代码通过条件判断避免除以零错误,但需要开发者提前知道可能的错误情况。 ##### `try-catch` 示例: ```java try { int result = 10 / 0; System.out.println("Result: " + result); } catch (ArithmeticException e) { System.out.println("Caught an ArithmeticException: " + e.getMessage()); } finally { System.out.println("Finally block executed."); } ``` 该代码通过异常捕获机制处理除以零错误,并提供额外的错误信息,同时 `finally` 块确保某些代码无论是否发生异常都会执行 [^3]。 --- ###
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值