اکسپشن چیست؟
دلایل رخداد exception ها:
- کاربر یک داده نامعتبر وارد کرده است.
- یک فایل که نیاز به باز شدن دارد پیدا نشود.
- اتصال شبکه در وسط ارتباط گم شده است یا JVM از حافظه خارج شده است.
انواع خطاها:
با دانستن دلایل رخداد یک اکسپشن میتوان به طور کلی خطاها را به دو دسته تقسیم کرد: خطاهای زمان کامپایل و خطاهای زمان اجرا که در ادامه به توضیح آنها خواهیم پراخت.
خطای زمان کامپایل :(Compile-Time Error)
احتمالا در روند یادگیری جاوا با این خطا بارها مواجه شدید. این خطا در اثر درست ننوشتن کدهای برنامه رخ میدهد. مثلا اگر در پایان دستورها علامت ; را قرار ندهید این یک خطای زمان کامپایل محسوب میشود. چون این نوع خطاها هنگام کامپایل برنامه و قبل از اجرای آن تشخیص داده می شوند به آنها خطای زمان کامپایل گفته میشود. تمام ideهای جاوا که امروزه وجود دارند خطای زمان کامپایل را در همان لحظه رخداد به برنامه نویس اطلاع میدهند. به عنوان مثال در ایکلیپس(Eclips) خطاهای زمان کامپایل با خط قرمزی که زیر کد کشیده میشود، مشخص میشوند.
نکته: به خطاهای زمان کامپایل خطای سینتکس یا خطای نحوی (Syntax Error) نیز گفته میشود.
خطای زمان اجرا :(Runtime Error)
تشخیص خطاهای زمان اجرا دشوارتر از تشخیص خطاهای نحوی است. این نوع خطاها تا قبل از اجرای برنامه و رسیدن به کدی که باعث بروز خطا میشود قابل تشخیص نیستند و به همین دلیل به آن خطای زمان اجرا گفته میشود. یعنی این نوع خطاها در طول اجرای برنامه رخ میدهند.
int[] nums = {1, 2, 3};
System.out.println(nums[3]);
بیشتر بخوانید: جاوا اف ایکس چیست و چه کاربردی دارد؟ در این مقاله با پلتفرم FX آشنا می شوید
چگونگی رفع اکسپشن در برنامه:
Try
{
//Protected code
}catch(ExceptionName e1)
{
//Catch block
}
به کدی که داخل بلوک try قرار می گیرد، کد محافظت شده گویند. دقت داشته باشید که بلوک های catchباید بلافاصله بعد از بلوک try قرار بگیرند. بعد از هر بلوک try هم باید بلوک های catch و یا بلوک finally بیاید. بلوک های catch برای درگیر شدن با exception ها به کار می روند. اصولا هر بلوک catch برای مدیریت یک Exception به کار می رود. وقتی که در داخل کدهای بلوک try خطایی رخ دهد بلوک catch مربوط به آن، اجرا خواهد شد.
// File Name : ExcepTest.java
import java.io.*;
public class ExcepTest {
public static void main(String args[]) {
try {
int a[] = new int[2];
System.out.println("Access element three :" + a[3]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Exception thrown :" + e);
}
System.out.println("Out of the block");
}
}
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3
Out of the block
try
{
//Protected code
}catch(ExceptionType1 e1)
{
//Catch block
}catch(ExceptionType2 e2)
{
//Catch block
}catch(ExceptionType3 e3)
{
//Catch block
}
catch (IOException|FileNotFoundException ex) {
logger.log(ex);
throw ex;
}
توضیح کلمه های throws و throw:
بلاک :finally
try {
// Protected code
} catch (ExceptionType1 e1) {
// Catch block
} catch (ExceptionType2 e2) {
// Catch block
} catch (ExceptionType3 e3) {
// Catch block
}finally {
// The finally block always executes.
}
نکات زیر را به خاطر بسپارید:
- یک عبارت catch نمی تواند بدون دستورات وجود داشته باشد.
- هرگاه یک بلوک try/catch وجود داشته باشد، finally در آن اجباری نیست.
ساختن exception در جاوا:
-
همه ی Exception ها باید فرزند Throwable باشند و از آن ارث برده باشند.
-
اگر می خواهید exception کامپایل بسازید که کاربر را مجبور به مدیریت exception کند باید کلاسی که می سازید فرزند کلاس Exception باشد.
-
اگر می خواهید که exception شما exception زمان اجرا باشد، باید کلاس شما فرزند RuntimeException باشد.
class MyException extends Exception{
}
نظر شما در تصمیم دیگران اثرگذار است.
لطفا برای همراهان درسمن و بهتر شدن دوره نظر خود را بنویسید.