63 lines
2.2 KiB
Scala
63 lines
2.2 KiB
Scala
//Defining exceptions
|
|
class AccountBlockException extends Exception
|
|
class InsufficientFundsException(val amount: Double) extends Exception
|
|
|
|
class CheckingAccount(number: Int, var blocked: Boolean = false, var balance: Double = 0.0) {
|
|
def deposit(amount: Double) { // Throwing an exception 1
|
|
if (blocked) throw new AccountBlockException
|
|
balance += amount
|
|
}
|
|
|
|
def withdraw(amount: Double) { // Throwing an exception 2
|
|
if (blocked) throw new AccountBlockException
|
|
if (amount <= balance) balance -= amount
|
|
else throw new InsufficientFundsException(amount - balance)
|
|
}
|
|
}
|
|
|
|
object CheckingAccount extends App {
|
|
|
|
class ExampleException1 extends Exception
|
|
|
|
val c = new CheckingAccount(101)
|
|
println("Depositing $500...")
|
|
try {
|
|
c.deposit(500.00)
|
|
println("\nWithdrawing $100...")
|
|
c.withdraw(100.00)
|
|
println("\nWithdrawing $600...")
|
|
c.withdraw(600.00)
|
|
} catch { // Exception handler
|
|
case ac: InsufficientFundsException => println(s"Sorry, but you are short ${'$'} ${ac.amount}")
|
|
case ac: AccountBlockException => println("Account blocked.")
|
|
|
|
///////////////////////////// An example of multiple exception handler ////////////////////////
|
|
case e@(_: ExampleException1 |
|
|
_: InterruptedException) => println(s"Out of memory or something else.")
|
|
|
|
case e: Exception => e.printStackTrace()
|
|
case _: Throwable => // Exception cached without any action
|
|
} finally println("Have a nice day")
|
|
}
|
|
|
|
object CheckingBlockingAccount extends App {
|
|
val c = new CheckingAccount(102, true)
|
|
println("Depositing $500...")
|
|
try {
|
|
c.deposit(500.00)
|
|
println("\nWithdrawing $100...")
|
|
c.withdraw(100.00)
|
|
println("\nWithdrawing $600...")
|
|
c.withdraw(600.00)
|
|
} catch { // Exception handler
|
|
case ac: InsufficientFundsException => println(s"Sorry, but you are short ${'$'} ${ac.amount}")
|
|
case ac: AccountBlockException => println("Account blocked.")
|
|
case e: Exception => e.printStackTrace()
|
|
case _: Throwable =>
|
|
} finally println("Have a nice day")
|
|
}
|
|
|
|
object NotImplementedErrorTest extends App {
|
|
??? // Throws scala.NotImplementedError: an implementation is missing
|
|
}
|