مدیریت خطا یا پرتاب خطا با دستور Throw در جاوا (مدیریت exception یا استثنا یا خطا در java)
سه شنبه, ۳ شهریور ۱۳۹۴، ۰۳:۲۹ ق.ظ
منبع :gameover.blog.ir
ما توی basic4android یا بعضی زبونا یه چیز داریم به نام Exception یا همون
"استثنا"ی خودمون. از این استثنا با نام خلاصه ی e هم توی سیشارپ یا بعضی
زبون ها و حتی گاهی جاوا استفاده می شه.
توی vb6 (ویژوال بیسیک شش) دستوری داشتیم تحت عنوان on error resume next که می گفت اگه خطا داشتیم محل نذار برو دستور خط بعدی رو اجرا کن. یا دستوری داشتیم به اسم on error goto labelName که می گفتیم اگه خطایی داد برو به برچسبی که معرفی کردیم.
و اما throw یعنی چی؟ throw از لحاظ لغوی به معنی پرتاب هست. اما چه ربطی به بحث ما داره ؟
حتما دیدید همیشه می گن java بهترین زبون هست و از لحاظ امنیت حرف اول رو می زنه(وارد مبحث python نشید فعلا).یکی از دلایل اینکه جاوا امنیتی بسیار خوبی داره همینه که با استفاده از دستور throw می تونیم مدیریت خطا کنیم و دیگه نذاریم خطای رخ داده سیگنالش به کامپایلر یا مفسر برسه. می یایم به دستور throw خطاهای رخ داده رو پرتاب می کنیم به یه سمت دیگه. یا در اصطلاح پاس می دیم به بخشی داخل کدهای خودمون و این خطا رو می یایم تجزیه تحلیل می کنیم(با دستورات و توابع یا متدهای تعریف شده ی زبون جاوا).
ما خطاهای مختلفی داریم و برای مدیریت خطاهای مختلف کلاس های خاص وجود داره . مثلا IOException برای مدیریت استثنا(خطا)های ورودی خروجی هست.(دستوارت try catch هم داریم اینجا بحث نمی کنم)
مثال :
کد PHP:
//A void method
public void sample()
{
//Statements
//if (somethingWrong) then
IOException e = new IOException();
throw e;
//More Statements
}
سپس دستور throw e خودش خودکار به کامپایلر دستور می ده اگه خطایی رخ داد به خروجی نبر ، پرتش کن توی جایی از حافظه که به متغیر e اختصاص دادیم. توی کدها هم می تونیم این e رو مدیریت کنیم مثلا e بذاریم بعدش نقطه بذاریم و ببینیم چیا داره.مثل کد خطا،مثل متن خطا،سطر و ستونی که خطا رخ داده و ... .
مثال دیگه با دستور try catch:
کد PHP:
class ThrowDemo{
public static void main(String args[]){
try{
char array[] = {'a','b','g','j'};
/*I'm displaying the value which does not
* exist so this should throw an exception
*/
System.out.println(array[78]);
}catch(ArithmeticException e){
System.out.println("Arithmetic Exception!!");
}
}
}
کد:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
78 at beginnersbook.com.ThrowDemo.main(Details.java:9)
مثال دیگه از throw exception
کد PHP:
package beginnersbook.com;
class MyOwnException extends Exception {
public MyOwnException(String msg){
super(msg);
}
}
class EmployeeTest {
static void employeeAge(int age) throws MyOwnException{
if(age < 0)
throw new MyOwnException("Age can't be less than zero");
else
System.out.println("Input is valid!!");
}
public static void main(String[] args) {
try {
employeeAge(-2);
}
catch (MyOwnException e) {
e.printStackTrace();
}
}
}
کد:
beginnersbook.com.MyOwnException: Age can't be less than zero
مثالی از throw های تو در تو:
کد PHP:
package beginnersbook.com;
class Exception2{
static int sum(int num1, int num2){
if (num1 == 0)
throw new ArithmeticException("First parameter is not valid");
else
System.out.println("Both parameters are correct!!");
return num1+num2;
}
public static void main(String args[]){
int res=sum(0,12);
System.out.println(res);
System.out.println("Continue Next statements");
}
}
کد:
Exception in thread main java.lang.ArithmeticException: First parameter is not valid
منبع:
http://beginnersbook.com/2013/04/throw-in-java/
۹۴/۰۶/۰۳