Դաս 19.2։ Java – Exceptions

0

Throws/Throw Keywords

Եթե մեթոդը չի կարգավորում ստուգված բացառությունը/checked exception, ապա մեթոդը պետք է հայտարարի դրա մասին throws keyword-ի միջոցով։ Այն հայտնվում է մեթոդի վերջում։

Այն հնարավոր է կիրառել նոր ստեղծված բացառության կամ արդեն իսկ հայտնաբերված բացառության դեպքում՝ օգտագործելով throw keyword-ը։

Փորձենք հասկանալ throws և throw keywords-ի տարբերությունները։ Առաջինն օգտագործվում է ստուգված բացառության կարգավորումը հետաձգելու համար, իսկ մյուսը՝ օգտագործվում է բացառությունը, ակնհայտորեն կանչելու համար։

Օրինակ՝

import java.io.*;

public class className {

 

public void deposit(double amount) throws RemoteException {

// Method implementation

throw new RemoteException();

}

// Remainder of class definition

}

Մեթոդը կարող է հայտարարվել, որ այն մեկից ավելի բացառություն է «նետում», որի դեպքում բացառությունները հայտարարագրվում են ցանկում՝ միմյանցից բաժանված ստորակետերով: Օրինակ, հետևյալ մեթոդը հայտարարում է, որ այն «նետում» է RemoteException և InsufficientFundsException –

Օրինակ՝

import java.io.*;

public class className {

 

public void withdraw(double amount) throws RemoteException,

InsufficientFundsException {

// Method implementation

}

// Remainder of class definition

}

Եզրափակիչ բլոկ/ Finally Block

Finally Block-ը հաջորդում է try block կամ catch block-ին: Կոդի այս բլոկը իրականացնում է իր գործողությունը, անկախ բացառության դրսևորումից:

Finally Block-ի կիրառումը թույլ է տալիս գործարկել ցանկացած մաքրման տիպի հայտարարություններ(cleanup-type statement), որոնք ցանկանում եք, անկախ նրանից, թե ինչ է կատարվում պաշտպանված կոդի մեջ:

Finally Block-ը հայնտվում է c atch block-ի վերջում և ունի հետեւյալ շարադասությունը։

Syntax

try {

// Protected code

} catch (ExceptionType1 e1) {

// Catch block

} catch (ExceptionType2 e2) {

// Catch block

} catch (ExceptionType3 e3) {

// Catch block

}finally {

// The finally block always executes.

}

Օրինակ՝

public class ExcepTest {

 

public static void main(String args[]) {

int a[] = new int[2];

try {

System.out.println(“Access element three :” + a[3]);

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println(“Exception thrown :” + e);

}finally {

a[0] = 6;

System.out.println(“First element value: “ + a[0]);

System.out.println(“The finally statement is executed”);

}

}

}

Արդյունքը՝

Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3

First element value: 6

The finally statement is executed

Ուշադրություն դարձրեք հետևյալին՝

  • catch clause չի կարող գոյություն ունենալ առանց try statement-ի

  • Անհրաժեշտ չէ ունենալ finally clause, եթե առկա է try/catch block-ը։

  • try block չի կարող ներկա լինել առանց catch clause or finally clause-ի։

  • Ոչ մի կոդ չի կարող գտնվել try, catch, finally block-երի միջև:

Փորձ ռեսուրսներով/ try-with-resources

Ընդհանրապես, երբ մենք օգտագործում ենք որևէ ռեսուրս, ինչպես օրինակ հոսքերը, կապերը և այլն, դրանք անհրաժեշտ է փակել finally block-ով։ Հետևյալ ծրագրում մենք կարդում ենք տվյալների ֆայլից՝ օգտագործելով FileReader-ը և վերջանում ենք այն finally block-ով։

Օրինակ՝

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

 

public class ReadData_Demo {

 

public static void main(String args[]) {

FileReader fr = null;

try {

File file = new File(“file.txt”);

fr = new FileReader(file); char [] a = new char[50];

fr.read(a); // reads the content to the array

for(char c : a)

System.out.print(c); // prints the characters one by one

} catch (IOException e) {

e.printStackTrace();

}finally {

try {

fr.close();

} catch (IOException ex) {

ex.printStackTrace();

}

}

}

}

try-with-resources-ը կոչվում է նաև automatic resource management (ավտոմատ ռեսուրսների կառավարում), որը նոր բացառությունների կարգավորման նոր մեխանիզմ է ներկայացված Java 7-ում։ Այն ավտոմատ կերպով փակում է ռեսուրսները օգտագործված try catch block-ում։

Այս հայտարարությունը օգտագործելու համար պարզապես անհրաժեշտ է հայարարել պահանջվող ռեսուրսները փակագծերի մեջ, և ստեղծված ռեսուրսը ավտոմատ կերպով կփակվեն բլոկի վերջում: Հետևյալը try-with-resources statement-ի շարահյուսությունն է:

Syntax

try(FileReader fr = new FileReader(“file path”)) {

// use the resource

} catch () {

// body of catch

}

}

Հետևյալը ծրագիր է, որը կարդում է տվյալները ֆայլից՝ օգտագործելով try-with-resources statement-ը։

Օրինակ՝

import java.io.FileReader;

import java.io.IOException;

 

public class Try_withDemo {

 

public static void main(String args[]) {

try(FileReader fr = new FileReader(“E://file.txt”)) {

char [] a = new char[50];

fr.read(a); // reads the contentto the array

for(char c : a)

System.out.print(c); // prints the characters one by one

} catch (IOException e) {

e.printStackTrace();

}

}

}

try-with-resources statement հետ աշխատելիս անհրաժեշտ է հաշվի առնել հետևյալ կետերը՝

  • try-with-resources statement-ի հետ դաս օգտագործելու համար այն պետք է իրականացնի AutoCloseable ինտերֆեյսը և իր close() method-ը։

  • Դուք կարող եք հայտարարագրել ավելի քան մեկ դաս try-with-resources statement-ում։

  • Թեև դուք հայտարարում եք մի քանի դասեր try-with-resources statement-ի try block-ում, այդ դասերը փակվում են հակառակ կարգով:

  • Try-ում հայտարարված ռեսուրսը ստեղծվում է try-block-ի մեկնարկից առաջ:

  • Try block-ում հայտարարված ռեսուրսն հայտարարված է որպես վերջնական:

User-defined Exceptions

Օգտագործողի կողմից սահմանված բացառություններ։

Դուք կարող եք ստեղծել ձեր սեփական բացառությունները Java-ում: Այն ստեծելիս հիշեք ստորև նշված կետերը՝

  • Բոլոր բացառությունները պետք է լինեն Throwable

  • Եթե ցանկանում եք գրել ստուգված բացառություն, որը ավտոմատ կերպով կիրառվում է Handle կամ Declare Rule կողմից, ապա պետք է ընդլայնեք Exception դասը։

  • Եթե ցանկանում եք գրել runtime exception, ապա պետք է ընդլայնել RuntimeException դասը:

  • Մենք կարող ենք սահմանել մեր սեփական Exception class, հետևյալ կերպով՝

  • class MyException extends Exception {
  • }

Պարզապես պետք է ընդլայնել նախասահմանված Exception class-ը `ձեր սեփական բացառություն ստեղծելու համար: Դրանք համարվում են ստուգված բացառություններ: Հետևյալ InsufficientFundsException class-ը օգտագործողի կողմից սահմանված (user-defined) բացառություն է, որը ընդլայնում է Exception class-ը`դարձնելով այն ստուգված բացառություն: Բացառության դասը նման է ցանկացած այլ դասի, որը պարունակում է օգտակար դաշտեր և մեթոդներ:

Օրինակ՝

// File Name InsufficientFundsException.java

import java.io.*;

 

public class InsufficientFundsException extends Exception {

private double amount;

public InsufficientFundsException(double amount) {

this.amount = amount;

}

public double getAmount() {

return amount;

}

}

Մեր user-defined exception-ի կիրառությունը ցուցադրելու համար, հետևյալ CheckingAccount դասը պարունակում է withdraw () մեթոդը, որը «նետում» է InsufficientFundsException:

// File Name CheckingAccount.java

import java.io.*;

 

public class CheckingAccount {

private double balance;

private int number;

public CheckingAccount(int number) {

this.number = number;

}

public void deposit(double amount) {

balance += amount;

}

public void withdraw(double amount) throws InsufficientFundsException {

if(amount <= balance) {

balance -= amount;

}else {

double needs = amount balance;

throw new InsufficientFundsException(needs);

}

}

public double getBalance() {

return balance;

}

public int getNumber() {

return number;

}

}

Հետևյալ BankDemo ծրագիրը ցույց է տալիս CheckingAccount-ի deposit() և withdraw() մեթոդները։

// File Name BankDemo.java

public class BankDemo {

 

public static void main(String [] args) {

CheckingAccount c = new CheckingAccount(101);

System.out.println(“Depositing $500…”);

c.deposit(500.00);

try {

System.out.println(“\nWithdrawing $100…”);

c.withdraw(100.00);

System.out.println(“\nWithdrawing $600…”);

c.withdraw(600.00);

} catch (InsufficientFundsException e) {

System.out.println(“Sorry, but you are short $” + e.getAmount());

e.printStackTrace();

}

}

}

Արդյունքը՝

Depositing $500…

Withdrawing $100…

Withdrawing $600…

Sorry, but you are short $200.0

InsufficientFundsException

at CheckingAccount.withdraw(CheckingAccount.java:25)

at BankDemo.main(BankDemo.java:13)

Հաճախ հանդիպող բացառություններ

Java-ում կարելի է տարբերակել բացառությունների և սխալների երկու տեսակ։

  • JVM բացառություններ/JVM Exceptions – Սրանք բացառություններ / սխալներ են, որոնք նետվում են JVM-ն կողմից: Օրինակ` NullPointerException, ArrayIndexOutOfBoundsException, ClassCastException:

  • Ծրագրային բացառություններ/Programmatic Exceptions – Այս բացառությունները բացարձակապես նետվում են ծրագրի կամ API-ի ծրագրավորողների կողմից: Օրինակ՝ IllegalArgumentException, IllegalStateException.

Հարգելի ընթերցող, խնդրում ենք չմոռանալ like տալ մեր ֆեյսբուքյան էջին, քանի որ նորությունների մեծ մասը առաջինը տեղադրվում է հենց այնտեղ։ Ինչպես նաև հետևեք մեզ այլ սոցիալական ցանցերում և, իհարկե, գրանցվեք մեր բլոգում։

Share.