እንደ ጃቫ ገንቢ ፣ ስለ ጃቫ ልዩነቶች እና ለየት ያለ አያያዝ ጥሩ ዕውቀት ሊኖርዎት ይገባል ፡፡
ይህ መማሪያ እያንዳንዱ ፕሮግራም አድራጊ ከጃቫ ፕሮግራሞች ጋር ሲሰራ ሊኖረው የሚገባውን መሰረታዊ ዕውቀት ይሰጣል ፡፡ ለመጀመር ፣ በትክክል የጃቫ ልዩነቶች ምን እንደሆኑ በመረዳት እንጀምር ፡፡
የጃቫ ፕሮግራም ፕሮግራሙ በሚከናወንበት ጊዜ በድንገት እንዲቋረጥ የሚያደርጉ ችግሮች ሊያጋጥሙት ይችላሉ ፡፡ እነዚህ ችግሮች ልዩ ተብለው ይጠራሉ ፡፡
አንድ ጥሩ ፕሮግራም አውጪ በሚፈፀምበት ወቅት ሊከሰቱ የሚችሉ ስህተቶችን መገንዘብ እና እንደዚህ ያለ ልዩነት ቢኖር ለፕሮግራሙ የሚወስዱ ተለዋጭ መንገዶችን ማቅረብ መቻል አለበት ፡፡ ይህ አሠራር ልዩ አያያዝ ተብሎ ይጠራል ፡፡
አሁን በጭራሽ ለየት ያለ አያያዝ ለምን እንፈልጋለን ብለው ያስቡ ይሆናል ፡፡ ልዩነቶችን የማይጥሉ ፕሮግራሞችን ለምን አይጽፉም?
እንደ ተገኘ ፣ ልዩነቶችን የማይጥሉ ፕሮግራሞችን መፃፍ እንደሚመስለው ቀላል አይደለም ፡፡ ብዙ ጊዜ እነዚህ የማይወገዱ ስህተቶች ከፕሮግራም አድራጊው ቁጥጥር ውጭ ናቸው ፡፡
የተጠቃሚውን ግቤት የሚቀበሉ ፕሮግራሞች ተጠቃሚው በሚያቀርበው ልክ ያልሆነ ግብዓት ምክንያት ለየት ያሉ ነገሮችን ለማግኘት ይጋለጣሉ ፡፡ እንደዚሁ የፕሮግራም ባለሙያው ሳያውቁ በውጭ ምንጮች የተዛወሩ ፣ የተሰየሙ ወይም የተሰረዙበትን ዕድል ከግምት ውስጥ በማስገባት የውጭ ፋይሎችን ማንበብ ነው ፡፡
በእንደዚህ ያሉ ጉዳዮች ላይ መርሃግብሩ ግድያውን ሳያቋርጥ ልዩውን በጥሩ ሁኔታ ማስተናገድ መቻል አለበት ፡፡
በጃቫ ውስጥ ያሉ ሁሉም ልዩነቶች የ Exception
ልጅ መሆን አለባቸው ክፍል ፣ ራሱ የ Throwable
ልጅ ነው ክፍል
የ Exception
ሁለት ዋና ዋና ንዑስ ክፍሎች ክፍል ናቸው RuntimeException
እና IOException
.
ሌላ Throwable
ክፍል | | + + | | ክፍል ሆኖም ስህተቶች ከተለዩ የተለዩ ናቸው ፡፡
ስህተቶች ጄቪኤም በሚፈፀምበት ጊዜ ሊያጋጥማቸው የሚችሉትን ችግሮች ያመለክታሉ ፡፡ እነዚህ ችግሮች አብዛኛውን ጊዜ ወሳኝ እና የማይመለሱ ናቸው ፡፡ የማስታወሻ ፍሰቶች እና የቤተ-መጽሐፍት አለመጣጣም ጉዳዮች በፕሮግራሞች ውስጥ ለሚከሰቱ ስህተቶች የተለመዱ ምክንያቶች ናቸው ፡፡
Error
እና StackOverflowError
የጃቫ ስህተቶች ሁለት ምሳሌዎች ናቸው ፡፡
የጃቫ ልዩነቶችን በሁለት ዋና ዋና ክፍሎች ልንከፍላቸው እንችላለን ፡፡ ምልክት ተደርጎበታል እና ቁጥጥር ያልተደረገበት ልዩ ሁኔታዎች
የተረጋገጡ ልዩነቶች ከማጠናቀርዎ በፊት በፕሮግራሙ ውስጥ መያዝ የሚያስፈልጋቸው ልዩ ሁኔታዎች ናቸው ፡፡ እነዚህ ልዩነቶች ካልተያዙ ፕሮግራሙ በጃቫ አቀናባሪ አይሰበሰብም ፡፡ ስለዚህ ፣ እነዚህም የማጠናቀር-ጊዜ ልዩነቶች ተብለው ይጠራሉ ፡፡ OutOfMemoryError
ከተፈተሹ ልዩነቶች ጥሩ ምሳሌዎች ናቸው ፡፡
ቁጥጥር ያልተደረገባቸው ነገሮች ፕሮግራሙን በሚያጠናቅቁበት ጊዜ አጠናቃዩ ችላ የሚሏቸው ልዩነቶች ናቸው ፡፡ እነዚህን የማይካተቱ ነገሮችን በፕሮግራሙ ውስጥ ብንይዝም ፕሮግራሙ ሲጠናቅቅ ምንም ችግር የለውም ፡፡ በእነዚህ ልዩነቶች ላይ የተለየ አያያዝ ስላልተጫነ ፕሮግራማችን ወደ | _ + + | | የፕሮግራም መቋረጥ ያስከትላል ፡፡
IOExceptions
ን የሚያራዝሙ ሁሉም ክፍሎች ክፍል ያልተፈተሹ ልዩነቶች ናቸው ፡፡ የእነዚህ ክፍሎች ሁለት ምሳሌዎች RuntimeExceptions
እና RuntimeException
.
በጃቫ ውስጥ በብዛት ጥቅም ላይ የዋሉ ጥቂት ዘዴዎችን እናልፋለን NullPointerException
ክፍል
ArrayIndexOutOfBoundsException
: ስለተከሰተው ሁኔታ ዝርዝር መረጃ የያዘ መልእክት ይመልሳል።Exception
: የልዩነቱ ቁልል ዱካ ይመልሳል።getMessage
: የክፍል ስሙን እና የተመለሰውን መልእክት በ printStackTrace
ይመልሳል ዘዴ.ልዩ ነገሮችን በጃቫ ውስጥ እንዴት መያዝ እንደምንችል እስቲ እንመልከት
የማይካተቱ ነገሮችን ለመያዝ እና በአግባቡ በመጠቀም ልንይዛቸው እንችላለን መሞከር-መያዝ ማገጃ በጃቫ ውስጥ።
በዚህ አገባብ ውስጥ ለየት ያለ ነገር ለመጣል የተጋለጠው የኮዱ ክፍል በሙከራ ብሎክ ውስጥ የተቀመጠ ሲሆን የመያዣው ብሎክ / ብሎኮች የተጣሉትን ልዩነቶች / ልዩነቶችን ይይዛሉ እና በምናቀርባቸው አመክንዮዎች ይይዛሉ ፡፡
የሙከራ ለመያዝ ብሎክ መሰረታዊ አገባብ እንደሚከተለው ነው-
toString
በዚህ አካሄድ ፕሮግራሙ አንድ ለየት ያለ ነገር በፕሮግራሙ ሲወረወር የግድያውን አያቆምም ፣ ይልቁንም በፀጋ ይከናወናል ፡፡
getMessage
ን እንዴት እንደሚይዙ እንመለከታለን በ try {
ተወረወረ በጃቫ ፕሮግራም ውስጥ ክፍል ፡፡
//exception-prone code } catch(Exception e) {
//error handling logic }
ለምሳሌ:
IOExceptions
እዚህ እኛ FileReader
ን ለማስተናገድ አንድ ነጠላ የማገጃ ማገጃ ተጠቅመናል የ 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();
}
} } FileNotFoundException
በ FileReader
ተወረወረ የ IOException
ዘዴ ክፍል
እነዚህ ሁለቱም ልዩነቶች የ read()
ልጆች ናቸው ክፍል
በነጠላ ሙከራ መግለጫው ውስጥ በኮዱ የተወረወሩ የተለያዩ አይነቶች ስህተቶችን ለመያዝ በርካታ የመያዣ መግለጫዎችን መጠቀም እንችላለን ፡፡ ለቀደመው ምሳሌ FileReader
ን ለመያዝ አንድ የመያዝ ብሎክን መጠቀም እንችላለን እና ሌላ የመያዝ ብሎክ ለ Exception
የሚከተለው የኮድ ቅንጣቢ እንደሚታየው
FileNotFoundException
የተወረወረው ልዩነት በመጀመሪያው የመያዣ መግለጫ ከተያዘው ልዩ ጋር የሚዛመድ ከሆነ ከዚያ በመጀመሪያው የመያዝ መግለጫ ውስጥ ባለው አመክንዮ ይያዛል ፡፡
ልዩነቶቹ የማይዛመዱ ከሆነ ወደ ሁለተኛው የመያዣ መግለጫ ይተላለፋል። ከሁለት በላይ የመያዝ መግለጫዎች ካሉ ይህ ልዩነቱ የእርሱን ዓይነት የሚይዝ የመያዝ መግለጫ እስኪደርስ ድረስ ይህ ሂደት ይቀጥላል።
ጀምሮ IOException
አንድ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class TryCatchBlockExample {
ን ለመያዝ የ 2 ኛ የመያዝ መግለጫን በመጠቀም የ
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();
}
} } FileNotFoundException
ንዑስ አይነት ነው አይሰራም ፡፡ በመጀመሪያው የመያዣ መግለጫ ይያዛል እና ወደ 2 ኛ መግለጫ በጭራሽ አይደርሰውም ፡፡
ሀ ስንጠቀም መሞከር-መያዝ በብሮግራማችን ውስጥ ልዩነቶችን ለመያዝ ብሎክ ፣ ለየት ያለ ሁኔታ ቢያዝም ባይያዝም አንዳንድ አመክንዮዎችን ተግባራዊ ማድረግ የምንፈልግባቸው አጋጣሚዎች አሉ ፡፡ በእንደዚህ ያሉ ጉዳዮች ላይ ሀ መሞከር-በመጨረሻ- ሀ ብቻ ከመሆን ይልቅ አግድ መሞከር-መያዝ ብሎክ
ከዚያ ፣ በ IOException
ውስጥ ያለው ኮድ መግለጫው ለየት ያለ ሁኔታ ቢከሰትም ባይሆንም ይተገበራል ፡፡ የ FileNotFoundException
መግለጫ በሙከራ ለመያዝ በመጨረሻው መጨረሻ ላይ መምጣት አለበት።
ለምሳሌ ፣ finally
ስንጠቀም ፋይልን ለማንበብ ክፍል ፣ ልዩነቱ ቢከሰትም ባይከሰት በሂደቱ መጨረሻ የተከፈተውን ፋይል መዝጋት አስፈላጊ ነው ፡፡ ይህንን ለማረጋገጥ ፋይሉን በ finally
ውስጥ እንዲዘጋ ኮዱን ማስቀመጥ እንችላለን መግለጫ
FileReader
ነገር ግን ፣ ከላይ የተጠቀሰውን ኮድ ለማጠናቀር ከሞከሩ ባልተያዘ finally
ኮዱ አይሰበሰብም ፡፡ ይህ የሆነበት ምክንያት 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();
}
} } IOException
ዘዴ ክፍል መጣልም ይችላል close()
. ስለዚህ ይህንን ክፍል እንደዚህ ባለው በሌላ የሙከራ ክፍል ውስጥ ማስቀመጥ አለብን ፡፡
FileReader
IOExceptions
ን በመጠቀም ስህተቶችን ማስተናገድ ቁልፍ ቃል በጃቫ ውስጥ ቀላል ነው በእውነቱ ፣ በዚህ አካሄድ ውስጥ በእውነቱ በሚከሰትበት ቦታ ላይ ልዩነትን በትክክል አያስተናግዱም ፡፡ በምትኩ ፣ የአሁኑን ዘዴ ወደ ሚጠራው ዘዴ ከአሁኑ ዘዴ ውጭ እንጥለዋለን ፡፡ ከዚያ ስህተቱን መስጠት የውጪው ዘዴ ሀላፊነት ይሆናል ፡፡
አንድን ዘዴ ከአንድ ዘዴ ለመጣል ፣ ይህ ዘዴ የታሰበውን ልዩነት ሊጥል እንደሚችል በቀላሉ ማሳወቅ አለብዎት። እስቲ እንዴት እንደምንይዝ እስቲ እንመልከት 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();
}
}
} } throws
ተወረወረ ይህንን አካሄድ በመጠቀም ክፍል።
ለምሳሌ:
IOExceptions
በዚህ ዝርዝር ውስጥ ካሉ ሌሎች አቀራረቦች በተለየ መልኩ የ FileReader
ቁልፍ ቃል ስህተቶችን ለማስተናገድ ጥቅም ላይ አይውልም ፡፡ ግን ብዙ ሰዎች 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();
} } throw
ቁልፍ ቃል ፣ እዚህ መወያየቱ የተሻለ ነው ብለን አሰብን ፡፡
የ throw
ቁልፍ ቃል አንድ ለየት ያለ ሁኔታ ለመጥራት ይጠቅማል ፡፡ አዲስ በቅጽበት የተለየን ወይም በዘዴ ውስጥ የተያዘ ልዩነትን መጣል እንችላለን።
throws
አብሮገነብ የጃቫ ልዩነቶችን ከመጠቀም በተጨማሪ የራስዎን የማይካተቱ ሊሆኑ ይችላሉ ፡፡ እንደ ወይ እንደተፈተሹ ወይም እንዳልተመረመሩ ሊገል defቸው ይችላሉ ፡፡ አዲስ የተፈተነ ልዩን ለመፍጠር የእርስዎ አዲስ ልዩነት የ | _ _ + _ | ማራዘም አለበት ክፍል
ለመፍጠር ያልተቆለፈ በስተቀር ፣ የ | _ _ + _ | ያራዝሙ ክፍል
በሚከተለው የኮድ ምሳሌ ውስጥ በተጠቃሚ የተገለጸ የተፈተነ ልዩነት ፈጥረናል-
throw
አሁን በፕሮግራማችን አመክንዮ ውስጥ ከላይ የተጠቀሰውን ለየት ያለ ሁኔታ ልንጠቀም እንችላለን ፡፡
public class ThrowExample {
public void invalidate(int amount) throws Exception {
if (amount < 500) {
throw new Exception('Amount not sufficient');
}
} }
Exception
ን በመጠቀም የሕብረቁምፊን ርዝመት ካረጋገጥን ክፍል ፣ አንድ _ _ + _ | ይጥላል የሕብረቁምፊው ርዝመት ከዝቅተኛው ርዝመት በታች ወይም ከከፍተኛው ርዝመት በላይ ከሆነ።
RuntimeException
ከላይ የተጠቀሰውን ኮድ ቅንጥብ ስናከናውን አንድ 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;
} }
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');
}
} }
በዚህ ማጠናከሪያ ትምህርት ውስጥ ለጃቫ ልዩ ሁኔታዎች ፈጣን እና አጭር መግለፅ ለእርስዎ ሰጥተናል ፡፡ የማይካተቱ ምን እንደሆኑ እና እንዴት በጃቫ ፕሮግራምዎ ውስጥ እንዴት እንደሚይዙ አሁን ጥሩ ግንዛቤ እንዳገኙ ተስፋ እናደርጋለን ፡፡