Kotlin 异常处理 |尝试、捕捉、投掷,最后
异常是在程序执行期间(即在运行时)发生的不希望的或意外事件,它破坏了程序指令的正常流程。异常处理是一种技术,我们可以使用它来处理错误并防止可能导致程序停止的运行时崩溃。
有两种类型的例外 -
- Checked Exception – 通常在方法上设置并在编译时检查的异常,例如 IOException、FileNotFoundException 等
- UnChecked Exception – 通常是由于逻辑错误并在运行时检查的异常,例如 NullPointerException、ArrayIndexOutOfBoundException 等
Kotlin 异常 –
在 Kotlin 中,我们只有未经检查的异常,并且只能在运行时捕获。所有异常类都是Throwable类的后代。
我们通常使用throw表达式来抛出异常对象——
throw Exception("Throw me")
一些常见的例外是:
- NullPointerException:当我们尝试调用空对象的属性或方法时抛出它。
- 算术异常:对数字执行无效算术运算时抛出。例如——除以零。
- SecurityException:抛出它表示安全违规。
- ArrayIndexOutOfBoundException:当我们尝试访问数组的无效索引值时抛出它。
Kotlin 抛出算术异常的程序——
Kotlin
fun main(args : Array){
var num = 10 / 0 // throws exception
println(num)
}
Kotlin
import kotlin.ArithmeticException
fun main(args : Array){
try{
var num = 10 / 0
}
catch(e: ArithmeticException){
// caught and handles it
println("Divide by zero not allowed")
}
}
Kotlin
fun test(a: Int, b: Int) : Any {
return try {
a/b
//println("The Result is: "+ a / b)
}
catch(e:Exception){
println(e)
"Divide by zero not allowed"
}
}
// main function
fun main(args: Array) {
// invoke test function
var result1 = test(10,2 ) //execute try block
println(result1)
var result = test(10,0 ) // execute catch block
println(result)
}
Kotlin
fun main(args : Array){
try{
var ar = arrayOf(1,2,3,4,5)
var int = ar[6]
println(int)
}
finally {
println("This block always executes")
}
}
Kotlin
fun main (args: Array){
try {
var int = 10 / 0
println(int)
} catch (e: ArithmeticException) {
println(e)
} finally {
println("This block always executes")
}
}
Kotlin
fun main(args: Array) {
test("abcd")
println("executes after the validation")
}
fun test(password: String) {
// calculate length of the entered password and compare
if (password.length < 6)
throw ArithmeticException("Password is too short")
else
println("Strong password")
}
输出:
Exception in thread "main" java.lang.ArithmeticException: / by zero
在上面的程序中,我们用值10/0初始化num
变量,但我们知道在算术中除以零是不允许的。当我们试图运行程序时,它会抛出一个异常。
为了解决这个问题,我们必须使用 try-catch 块。
Kotlin try-catch 块 –
在 Kotlin 中,我们使用 try-catch 块在程序中进行异常处理。 try 块包含负责抛出异常的代码,而 catch 块用于处理异常。这个块必须写在 main 或其他方法中。 Try 块后面应该跟着 catch 块或 finally 块或两者。
try-catch 块的语法 -
try {
// code that can throw exception
} catch(e: ExceptionName) {
// catch the exception and handle it
}
使用 try-catch 块处理算术异常的 Kotlin 程序 -
科特林
import kotlin.ArithmeticException
fun main(args : Array){
try{
var num = 10 / 0
}
catch(e: ArithmeticException){
// caught and handles it
println("Divide by zero not allowed")
}
}
输出:
Divide by zero not allowed
解释:
在上面的程序中,我们使用了 try-catch 块。可以抛出异常的num
变量包含在 try 块的大括号中,因为在算术中没有定义除以零。异常被 catch 块捕获并执行println()
语句。
Kotlin try-catch 块作为表达式 –
我们已经知道,表达式总是返回一个值。我们可以在程序中使用 kotlin try-catch 块作为表达式。表达式返回的值将是 try 块的最后一个表达式或 catch 块的最后一个表达式。如果代码中发生异常,则 catch 块返回该值。
使用 try-catch 作为表达式的 Kotlin 程序——
科特林
fun test(a: Int, b: Int) : Any {
return try {
a/b
//println("The Result is: "+ a / b)
}
catch(e:Exception){
println(e)
"Divide by zero not allowed"
}
}
// main function
fun main(args: Array) {
// invoke test function
var result1 = test(10,2 ) //execute try block
println(result1)
var result = test(10,0 ) // execute catch block
println(result)
}
输出:
5
java.lang.ArithmeticException: / by zero
Divide by zero not allowed
在上面的代码中,我们使用了 try-catch 作为表达式。在程序顶部声明一个函数测试,并使用 try-catch 块返回一个值。我们已经从 main 方法调用了test
函数并传递了参数值 (10,2) 测试函数评估参数并返回尝试值(10/2 = 5) 。但是在下一次调用中,我们传递了(b=0) ,这次异常被捕获并返回 catch 块的表达式。
Kotlin 终于阻止了——
在 Kotlin 中,无论 catch 块是否处理了异常,都会始终执行 finally 块。所以它用于执行重要的代码语句。
我们还可以将 finally 块与 try 块一起使用,并从那里跳过 catch 块。
finally 块与 try 块的语法 -
try {
// code that can throw exception
} finally {
// finally block code
}
使用 finally 块和 try 块的 Kotlin 程序 -
科特林
fun main(args : Array){
try{
var ar = arrayOf(1,2,3,4,5)
var int = ar[6]
println(int)
}
finally {
println("This block always executes")
}
}
输出:
This block always executes
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: Index 6 out of bounds for length 5
在上面的程序中,我们使用了 try 和 finally 块并跳过了 catch 块。在这里,异常不是由 catch 块处理,而是执行 finally 块。
finally 块的语法与 try-catch 块 -
try {
// code that can throw exception
} catch(e: ExceptionName) {
// catch the exception and handle it.
} finally {
// finally block code
}
我们也可以一起使用 try、catch 和 finally 块。
Kotlin 程序使用 finally 块和 try-catch 块-
科特林
fun main (args: Array){
try {
var int = 10 / 0
println(int)
} catch (e: ArithmeticException) {
println(e)
} finally {
println("This block always executes")
}
}
输出:
java.lang.ArithmeticException: / by zero
This block always executes
Kotlin throw 关键字 –
在 Kotlin 中,我们使用 throw 关键字来抛出显式异常。它也可以用来抛出自定义异常。
使用 throw 关键字的 Kotlin 程序 –
科特林
fun main(args: Array) {
test("abcd")
println("executes after the validation")
}
fun test(password: String) {
// calculate length of the entered password and compare
if (password.length < 6)
throw ArithmeticException("Password is too short")
else
println("Strong password")
}
输出:
Exception in thread "main" java.lang.ArithmeticException: Password is too short
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。