Eisgeachdan Java agus mar a làimhsicheas tu iad

Mar leasaiche Java, bu chòir eòlas math a bhith agad air eisgeachdan Java agus làimhseachadh eisgeachd.

Tha an oideachadh seo a ’toirt seachad an eòlas bunaiteach a dh’ fheumas a bhith aig a h-uile prògramadair nuair a bhios iad ag obair le prògraman Java. Gus tòiseachadh, tòisichidh sinn le bhith a ’tuigsinn dè dìreach a tha ann an Java Eisgeachdan.



Dè a th ’ann an Java eisgeachdan

Faodaidh prògram Java a bhith na dhuilgheadas a thig gu crìch gu h-obann air a ’phrògram nuair a thèid a chur gu bàs. Canar eisgeachdan ris na duilgheadasan sin.


Bu chòir gum biodh prògramadair math comasach air aithneachadh na mearachdan a dh ’fhaodadh tachairt nuair a thèid an cur gu bàs agus slighean eile a thoirt seachad airson a’ phrògram a ghabhail gun fhios nach biodh an leithid sin ann. Canar làimhseachadh eisgeachd ris a ’chleachdadh seo.

A-nis is dòcha gu bheil thu a ’faighneachd carson a tha feum againn air làimhseachadh eisgeachd idir. Carson nach sgrìobh thu prògraman nach bi a ’tilgeil eisgeachdan?




Carson a tha feum againn air làimhseachadh eisgeachd

Mar a thionndaidh e, chan eil e cho furasta a bhith a ’sgrìobhadh phrògraman nach bi a’ tilgeil eisgeachdan. A ’mhòr-chuid den ùine, tha na mearachdan do-sheachanta sin a-mach à smachd a’ phrògraim.



Tha prògraman a tha a ’gabhail ri cuir a-steach luchd-cleachdaidh dualtach a bhith a’ ruith a-steach do eisgeachdan air sgàth cur-a-steach neo-dhligheach a tha an neach-cleachdaidh a ’toirt seachad. Mar sin tha a bhith a ’leughadh faidhlichean taobh a-muigh a’ beachdachadh air a ’chothrom gun deach an gluasad, an ath-ainmeachadh, no an toirt às le stòr taobh a-muigh gun eòlas a’ phrògraim.

Ann an leithid de chùisean, feumaidh am prògram a bhith comasach air an eisgeachd a làimhseachadh gu gràsmhor gun a bhith a ’cur gu bàs.



Rangachd Eisgeachdan Java

Bu chòir a h-uile eisgeachd ann an Java a bhith na phàiste den Exception clas, a tha ann fhèin na phàiste den Throwable clas.


Dà phrìomh fho-chlas den Exception clas tha RuntimeException agus IOException.



Eisgeachd vs Mearachd

Clas cloinne eile den Throwable is e clas an Error clas. Ach, tha mearachdan eadar-dhealaichte bho eisgeachdan.

Tha mearachdan a ’nochdadh dhuilgheadasan a dh’ fhaodadh a bhith aig an JVM aig àm cur gu bàs. Mar as trice tha na duilgheadasan sin deatamach agus nach gabh fhaighinn air ais. Tha call cuimhne agus cùisean neo-fhreagarrachd leabharlainn nan adhbharan cumanta airson mearachdan ann am prògraman.

StackOverflowError agus OutOfMemoryError tha dà eisimpleir de Mearachdan Java.




Eisgeachdan sgrùdaichte agus neo-sgrùdaichte

Faodaidh sinn Java Eisgeachdan a roinn ann an dà phrìomh roinn: sgrùdadh agus gun sgrùdadh eisgeachdan.

Is e eisgeachdan sgrùdaichte na h-eisgeadan a dh ’fheumar a làimhseachadh sa phrògram mus cuir iad ri chèile e. Mura tèid na h-eisgeadan sin a làimhseachadh, cha bhith am prògram air a chur ri chèile le inneal-cruinneachaidh Java. Mar sin, canar eisgeachdan ùine-cruinneachaidh riutha sin. IOExceptions nan eisimpleirean math de dh ’eisgeachdan sgrùdaichte.

Is e eisgeachdan neo-sgrùdaichte na h-eisgeadan a bhios an trusaiche a ’seachnadh nuair a bhios e a’ cur ri chèile a ’phrògraim. Chan eil diofar a bheil sinn air na h-eisgeadan sin a làimhseachadh sa phrògram no nach eil e gu diofar cuin a bhios am prògram air a chur ri chèile. Leis nach eil làimhseachadh eisgeachd air a chuir air na h-eisgeadan sin, faodaidh am prògram againn ruith a-steach gu RuntimeExceptions thig sin gu crìch prògram.

A h-uile clas a leudaicheas an RuntimeException tha clas neo-sgrùdaichte. Is e dà eisimpleir de na clasaichean sin NullPointerException agus ArrayIndexOutOfBoundsException.




Dòighean cumanta air an cleachdadh anns a ’chlas eisgeachd

Thèid sinn tro ghrunn dhòighean a chleachdar gu cumanta anns an Java Exception clas:

  1. getMessage: a ’tilleadh teachdaireachd anns a bheil fiosrachadh mun eisgeachd a thachair.
  2. printStackTrace: a ’tilleadh lorg stac an eisgeachd.
  3. toString: a ’tilleadh ainm a’ chlas agus an teachdaireachd a thillear le getMessage modh.


Mar a làimhsicheas tu eisgeachdan

Chì sinn mar as urrainn dhuinn dèiligeadh ri eisgeachdan ann an Java:

feuch-ghlacadh

Faodaidh sinn eisgeachdan a ghlacadh agus an làimhseachadh gu ceart le bhith a ’cleachdadh a feuch-ghlacadh bloc ann an Java.

Anns an t-siostaim seo, tha am pàirt den chòd a tha buailteach a bhith a ’tilgeil eisgeachd air a chuir taobh a-staigh bloc feuchainn agus bidh am bloc glacaidh / blocaichean a’ glacadh an eisgeachd / eisgeachdan a chaidh a thilgeil agus gan làimhseachadh a rèir loidsig a bheir sinn seachad.


Tha an co-chòrdadh bunaiteach de bhloc feuchainn-glacaidh mar a leanas:

try {
//exception-prone code } catch(Exception e) {
//error handling logic }

Leis an dòigh-obrach seo, cha chuir am prògram stad air coileanadh nuair a thèid eisgeachd a thilgeil leis a ’phrògram, an àite sin, tha e air a làimhseachadh gu gràsmhor.

Chì sinn mar a làimhsicheas sinn an IOExceptions air a thilgeil leis an FileReader clas ann am prògram Java.

Eisimpleir:

import java.io.FileReader; public class TryCatchBlockExample {
public static void main(String[] args) {

try {

FileReader file = new FileReader('source.txt');

file.read();
}
catch(Exception e) {

e.printStackTrace();
}
} }

An seo, tha sinn air aon bhloc glacaidh a chleachdadh gus an FileNotFoundException a làimhseachadh air a thilgeil nuair a thèid an FileReader a thòiseachadh clas agus IOException air a thilgeil leis an read() modh an FileReader clas.

Is e clann an Exception an dà eisgeachd sin clas.

Faodaidh sinn cuideachd grunn aithrisean glacaidh a chleachdadh gus diofar sheòrsaichean mearachdan a thilgeil leis a ’chòd taobh a-staigh an aithris aon oidhirp. Mar eisimpleir roimhe, is urrainn dhuinn aon bhloc glacaidh a chleachdadh gus an FileNotFoundException a ghlacadh agus bloc glacaidh eile airson an IOException mar a tha a ’chriomag chòd a leanas a’ sealltainn:

import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class TryCatchBlockExample {
public static void main(String[] args) {

try {

FileReader file = new FileReader('source.txt');

file.read();

file.close();
}
catch(FileNotFoundException e) {

e.printStackTrace();
}
catch(IOException e) {

e.printStackTrace();
}
} }

Ma tha an eisgeachd a chaidh a thilgeil a ’maidseadh an eisgeachd a chaidh a làimhseachadh leis a’ chiad aithris glacaidh, tha e an uairsin air a làimhseachadh leis an loidsig taobh a-staigh a ’chiad aithris glacaidh.

Mura h-eil na h-eisgeachdan a ’maidseadh, thèid a chuir air adhart chun dàrna aithris glacaidh. Ma tha barrachd air dà aithris glacaidh ann, leanaidh am pròiseas seo gus an ruig an eisgeachd aithris glacaidh a ghlacas an seòrsa aige.

Bho FileNotFoundException na fho-sheòrsa de IOException, a ’cleachdadh an 2na aithris glacaidh gus grèim fhaighinn air FileNotFoundException cha bhith thu ag obair. Thèid a làimhseachadh leis a ’chiad aithris glacaidh agus cha ruig e a-riamh an 2na aithris.

Nota:Tha e èigneachail co-dhiù aon aithris glacaidh a chleachdadh le aithris fheuchainn.

mu dheireadh

Nuair a chleachdas sinn a feuch-ghlacadh bloc gus eisgeachdan a ghlacadh anns a ’phrògram againn, tha amannan ann a tha sinn airson beagan loidsig a chuir an gnìomh a dh’ aindeoin an deach eisgeachd a ghlacadh no nach deach. Ann an leithid de chùisean, is urrainn dhuinn a feuch-catch-mu dheireadh bloc an àite dìreach a feuch-ghlacadh bloc.

An uairsin, an còd taobh a-staigh an finally aithris air a bhuileachadh co-dhiù a tha eisgeachd a ’tachairt no nach eil. Tha an finally bu chòir aithris a thighinn an-còmhnaidh aig deireadh a ’bhloc feuchainn-mu dheireadh.

Mar eisimpleir, nuair a chleachdas sinn an FileReader clas gus faidhle a leughadh, tha e riatanach am faidhle fosgailte a dhùnadh aig deireadh a ’ghiollachd a bheil eisgeachd a’ tachairt no nach eil. Gus dèanamh cinnteach à seo, is urrainn dhuinn an còd a chuir gus am faidhle a dhùnadh am broinn finally aithris.

import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class TryCatchFinallyBlockExample {
public static void main(String[] args) {
FileReader file = null;
try {

file = new FileReader('source.txt');

file.read();
}
catch(FileNotFoundException e) {

e.printStackTrace();
}
catch(IOException e) {

e.printStackTrace();
}
finally {

file.close();
}
} }

Ach, ma dh'fheuchas tu ris a ’chòd gu h-àrd a chur ri chèile, cha bhith an còd air a chur ri chèile air sgàth inneal neo-làimhseachaidh IOException. Tha seo air sgàth gu bheil an close() modh an FileReader faodaidh clas tilgeil IOExceptions. Mar sin, feumaidh sinn am pàirt seo a chuir am broinn bloc feuchainn eile mar seo:

import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class TryCatchFinallyBlockExample {
public static void main(String[] args) {
FileReader file = null;

try {

file = new FileReader('source.txt');

file.read();
}
catch(FileNotFoundException e) {

e.printStackTrace();
}
catch(IOException e) {

e.printStackTrace();
}
finally {

try {


file.close();

}

catch(IOException e) {


e.printStackTrace();

}
}
} }

tilgeil

A ’làimhseachadh mhearachdan a’ cleachdadh an throws tha prìomh fhacal ann an Java sìmplidh. Gu dearbh, leis an dòigh-obrach seo, cha bhith thu dha-rìribh a ’làimhseachadh an eisgeachd san àite a tha e a’ tachairt. An àite sin, bidh sinn a ’tilgeil an eisgeachd a-mach às an dòigh làithreach chun an dòigh ris an canar am modh gnàthach. An uairsin, bidh làimhseachadh a ’mhearachd gu bhith na uallach air an dòigh a-muigh.

Gus eisgeachd a thilgeil a-mach à modh, feumaidh tu dìreach innse gum faod an dòigh seo an eisgeachd a tha air a mheas a thilgeil. Chì sinn mar as urrainn dhuinn làimhseachadh IOExceptions air a thilgeil leis an FileReader clas a ’cleachdadh an dòigh-obrach seo.

Eisimpleir:

import java.io.FileReader; import java.io.IOException; public class ThrowsExample {
public void readFile throws IOException {
FileReader file = new FileReader('source.txt');
file.read();
file.close();
} }

caith

Eu-coltach ri dòighean-obrach eile air an liosta seo, tha an throw chan eil prìomh fhacal air a chleachdadh gus mearachdan a làimhseachadh. Ach leis gu bheil a ’mhòr-chuid a’ trod ris an throw prìomh fhacal le throws prìomh fhacal, bha sinn den bheachd gum biodh e nas fheàrr a dheasbad an seo.

Tha an throw tha prìomh fhacal air a chleachdadh gus eisgeachd a ghairm gu follaiseach. Faodaidh sinn eisgeachd a tha air ùr-bhualadh a thilgeil no eisgeachd a chaidh a ghlacadh taobh a-staigh an dòigh-obrach.

public class ThrowExample {
public void invalidate(int amount) throws Exception {
if (amount < 500) {

throw new Exception('Amount not sufficient');
}
} }


Eisgeachdan air an comharrachadh le neach-cleachdaidh

A bharrachd air a bhith a ’cleachdadh eisgeachdan Java a tha air an togail a-steach, faodaidh tu na h-eisgeachdan agad fhèin a mhìneachadh. Faodaidh tu am mìneachadh mar eisgeachdan sgrùdaichte no neo-sgrùdaichte. Gus eisgeachd ùr a chaidh a sgrùdadh a chruthachadh, bu chòir don eisgeachd ùr agad an Exception a leudachadh clas.

Gus cruthachadh neo-sgrùdaichte eisgeachd, leudaich an RuntimeException clas.

Anns an eisimpleir còd a leanas, tha sinn air eisgeachd sgrùdaichte le mìneachadh cleachdaiche a chruthachadh:

public class InvalidLengthException extends Exception {
private int length;
private String message;
public InvalidLengthException(int length, String message) {
this.length=length;
this.message=message;
}
public int getAmount() {
return this.length;
}
public String getMessage() {
return this.message;
} }

A-nis is urrainn dhuinn an eisgeachd gu h-àrd a chleachdadh taobh a-staigh loidsig a ’phrògraim againn mar seo:

public class InputChecker {
private int minLength;
private int maxLength;
public InputChecker(int minLength, int maxLength) {
this.minLength=minLength;
this.maxLength=maxLength;
}
public void checkStringLength(String strInput) throws InvalidLengthException {
int strLength = strInput.length();
if (strLength maxLength){

throw new InvalidLengthException(strLength, 'Input should have maximum '+maxLength+' character');
}
} }

Ma nì sinn sgrùdadh air fad sreang le bhith a ’cleachdadh an InputChecker clas, tilgidh e a InvalidLengthException ma tha fad an sreang nas ìsle na an fhad as lugha no nas àirde na an fhad as motha.

public class Main {
public static void main(String[] args) {
InputChecker ic = new InputChecker(2, 7);
try {

ic.checkStringLength('longer than the maximum length');
}
catch(InvalidLengthException e) {

e.printStackTrace();
}
} }

Nuair a ruitheas sinn a ’chriomag chòd gu h-àrd, tilgidh e InvalidLengthException agus gheibh sinn na toraidhean a leanas:

InvalidLengthException: Input should have maximum 7 character
at InputChecker.checkStringLength(InputChecker.java:17)
at Main.main(Main.java:6)


Co-dhùnadh

San oideachadh seo, thug sinn ro-ràdh luath agus pongail dhut mu Java Exceptions. Tha sinn an dòchas gu bheil tuigse mhath agad a-nis air dè a th ’ann an eisgeachdan agus mar a làimhsicheas tu iad sa phrògram Java agad.