JVM
нь програм ажиллах явцад Java програмчлал хэлний хувьд утга зүйн алдаа гаргасан үед алдаатай байгааг програмд тайлбар (exception
) байдалаар илгээдэг.
Энэ гарсан алдааг Java хэлэнд програмистын тодорхойлж өгсөн газар руу нь програмын удирдлагыг шилжүүлнэ.
Java хэлний хувьд Throwable
-н яг доод тал дахь subclass
-ууд нь Exception
болон Error
байна. Тэд нар нь бас доор доороо өөрийн гэсэн subclass
-уудтай байна. Үүнийг доорх зурагаас харна уу.
Бүх гарч болохуйц exception
нь Throwable
болон үүний subclass
-уудаас байна. Энэ объект нь тухайн exception
үүссэнээс хойш түүнийг шийдэх handler
таарах хүртлэх бүх мэдээлэлийг хадагалан.
Ямар нэгэн exception
шидэх үед JVM
нь нэг нэгээр нь хийх үйлдлээ эхлүүлдэг, харин ажиллаж байгаа үйлдлээ (any expressions, statements, method and constructor invocations, initializers, and field initialization expressions) гүйцэт дуусгах албагүй. Энэ процесс нь түүнийг шийдэх handler
,тухайн exception
-ийн классын нэр эсвэл түүний superclass
-н нэр олдох хүртэл үргэлжилнэ. Хэрэв ямар нэгэн handler
байхгүй бол автоматаар uncaught exception handler
-т удирлагаа шилжүүлнэ.
Exception
болон Error
нь Throwable
-ийн яг доод талын subclass
юм.
Exception
нь сэргээгдэж болох бүх алдаануудынsuperclass
юм.Error
нь сэргээгдэх боломжгүй бүх алдаануудынsuperclass
юм.unchecked exception
нь бүхRuntimeException
болонError
классууд юм.- Компайл хийгдэж байгаа үед шалгахгүй, харин програм ажиллаж буй үед гарч ирдэг
exception
юм. Жишээ нь: NullPointerException
Object obj = null; obj.toString(); // This statement will throw a NullPointerException
- Компайл хийгдэж байгаа үед шалгахгүй, харин програм ажиллаж буй үед гарч ирдэг
checked exception
нь үлдсэн бүх класс юм.- Компайл хийгдэж байгаа үед шалгадаг ба түүнийг
throw
эсвэлtry ... catch
хйих ёстой. Жишээ нь: java.io.IOException
Дээрх код компайл хийгдэхгүй, яагаад гэвэл энэ кодонд алдаа гарч болох боловч түүнийгээ шийдээгүй. Үүнийг хоёр янзаар засч болно.public void ioOperation(boolean isResourceAvailable) { if (!isResourceAvailable) { throw new IOException(); } }
try catch
ашиглах
public void ioOperation(boolean isResourceAvailable) { try { if (!isResourceAvailable) { throw new IOException(); } } catch(IOException e) { // Handle caught exceptions. } }
throw
ашиглах
public void ioOperation(boolean isResourceAvailable) throws IOException { if (!isResourceAvailable) { throw new IOException(); } }
- Компайл хийгдэж байгаа үед шалгадаг ба түүнийг
Throw
statement ажиллахадJVM
-д шалгагдсан доголдолтой явц- Java хэлний утга зүйн хувьд алдаатай, тоог тэгт хуваах
LinkageError
үүссэн үед- Дотоод нөөц дууссан үлмаас алдаа заах