PDA

View Full Version : سوال درباره بلوک try catch



ASedJavad
یک شنبه 29 مرداد 1391, 19:28 عصر
سلام
بخش finally تو بلوک try catch کارش چیه

منظورم اینه که مثلا دو تا کد زیر تفاوتشون چیه؟

try{
...}
catch(e) {
...}
finally{
x=0;}



try{
...}
catch(e) {
...}
x=0;

spiderman200700
یک شنبه 29 مرداد 1391, 22:48 عصر
سلام
بلاک finally بدون توجه به این که بلاک catch اجرا بشه یا نشه، اجرا میشه.
این به این معنیه که اگه برنامه وارد بلاک try بشه بدون شک finally هم اجرا میشه.

ASedJavad
دوشنبه 30 مرداد 1391, 13:28 عصر
خب این رو که همه جا نوشتن
چه تو کتابا، چه تو مقالات و چه جاهای دیگه

چیزی رو که ننوشتن اینه که اون دو تا کد چه فرقی با هم دارن

parnian~parnian
دوشنبه 30 مرداد 1391, 14:17 عصر
خوب گاهی اوقات وقتی برنامه وارد بلاک catch میشه دیگه ادامه برنامه اجرا نمیشه تو این جور مواقع معمولا از finally استفاده میکنن .

ASedJavad
دوشنبه 30 مرداد 1391, 14:23 عصر
ممکنه از این حالت یه مثال بزنید؟

spiderman200700
دوشنبه 30 مرداد 1391, 19:55 عصر
در عمل اون دو تا کدی که گذاشتی دقیقا یه خروجی رو میدن. ولی finally یه روال اصولی برای انجام عملیاتیه که میخوای به صورت تضمینی بدون توجه به پیش اومدن استثنا انجام بشه.
مثل خیلی از مفاهیم دیگه که شاید خیلی جاها نیازی به استفاده ازشون نیست ولی استفاده ازشون باعث میشه که یه برنامه ی اصولی و طبق استاندارد های جهانی داشته باشیم.

حالا من یه مثال میزنم
اینی که میگم یه مثاله و finally ممکنه در خیلی جاهای دیگه هم اجرا بشه.

بعضی وقتا توی try یه فایل رو باز میکنی و میخوای اگه مشکلی توی خوندن فایل پیش اومد برنامه یه پیغام بده و بسته بشه. اگرم در خوندن فایل مشکلی پیش نیومد بازم بعد از تمام شدن بلاک try فایل بسته بشه و بعد ادامه ی کد ها اجرا بشه. اینجا باید فایل رو توی finally ببندی، وگرنه مجبور میشه کد مربوط به بسته شدن فایل رو دوبار بنویسی. یه بار توی catch و یه بار هم خارج از بلاک try catch

ASedJavad
دوشنبه 30 مرداد 1391, 20:17 عصر
وگرنه مجبور میشی کد مربوط به بسته شدن فایل رو دوبار بنویسی. یه بار توی catch و یه بار هم خارج از بلاک try catch

این هم از اون مثالها بود ها!
چه نیازی هست دو بار بنویسی
یه بار خارج از بلوک مینویسی و تموم دیگه!


مثل خیلی از مفاهیم دیگه که شاید خیلی جاها نیازی به استفاده ازشون نیست ولی استفاده ازشون باعث میشه که یه برنامه ی اصولی و طبق استاندارد های جهانی داشته باشیم

مگه اینکه این جوری باشه!
ولی نمیفهمم ؛اگه اینجوریه، پس چرا اکثر زبونای برنامه نویسی یه چیزی مشابه finally تو سینتکسشون دارن!
این نشون میده که لابد چیز مهمیه
ولی این که اهمیتش چیه من هنوز نفهمیدم!

spiderman200700
دوشنبه 30 مرداد 1391, 21:25 عصر
این هم از اون مثالها بود ها!
چه نیازی هست دو بار بنویسی
یه بار خارج از بلوک مینویسی و تموم دیگه!


ولی این که اهمیتش چیه من هنوز نفهمیدم!


نه از اون مثالها نبود
اینو ببین.
میشه بگی اینو چطوری میتونی بدون finally بنویسی، طوری که در هر شرایطی فایل بسته بشه؟
public String readFile() {
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(new File("file"));
StringBuffer stringBuffer = new StringBuffer();
int ch;
while ((ch = fileInputStream.read()) != -1) {
stringBuffer.append(ch);
}
return stringBuffer.toString();
} catch (IOException ex) {
return null;
} finally {
if (fileInputStream != null) {
try {
fileInputStream.close();
} catch (IOException ex1) {
ex1.printStackTrace();
}
}
}
}