0 امتیاز
قبل در برنامه نویسی توسط (467 امتیاز)

سلام. لطفا به کد زیر نگاه کنید.

package com.google;

class MyException extends Exception {
    public MyException() {
    }

    public MyException(String message) {
        super(message);
    }
}

public class MainApp {

    public static void main(String[] args) {
        try {
            System.out.println(myMethod(10));
        } catch (MyException e) {
            System.out.println(e.getMessage());
        }
    }

    private static int myMethod(int i) throws MyException {
        switch (i) {
            case 1:
                System.out.println("One");
                return 1;
            case 2:
                System.out.println("Two");
                throw new MyException("MyException");
                return 1;
            case 3:
                System.out.println("Three");
            default:
                System.out.println("Default");
                return 6;
        }
    }

}

از case دوم از return 1 خطا می‌گیره. اصلا نمی‌فهمم مشکل از چیه. لطفا راهنماییم کنید. ممنون.

1 پاسخ

0 امتیاز
قبل توسط (187 امتیاز)

وقتی از کلمه Throw استفاده می کنید کد های بعد اون قابل اجرا نیستند و کامپایلر از اون بلوک کلا به جایی که پرتاب شده میره، یعنی در واقع خطای موقع کامپایل رخ میده که بهش Unreachable Statement میگن.

این حالت برای موقعیت های دیگه ای هم مثل Break Continue Return و ... رخ میده که جملات بعد این کلمات قابل اجرا نیستند.

راهکارشم میتونه استفاده از ترفند های ریز مثل استفاده از یه If باشه.

package mkyong;
 
class MyException extends Exception {
    public MyException() {
    }
 
    public MyException(String message) {
        super(message);
    }
}
 
public class MainApp {
 
    public static void main(String[] args) {
        try {
            System.out.println(myMethod(10));
        } catch (MyException e) {
            System.out.println(e.getMessage());
        }
    }
 
    private static int myMethod(int i) throws MyException {
        switch (i) {
            case 1:
                System.out.println("One");
                return 1;
            case 2:
                System.out.println("Two");
                if (true)
                    throw new MyException("MyException");
                return 1;
            case 3:
                System.out.println("Three");
            default:
                System.out.println("Default");
                return 6;
        }
    }
 
}

 

سوالات مشابه

+1 امتیاز
1 پاسخ 692 بازدید
0 امتیاز
1 پاسخ 472 بازدید
+1 امتیاز
1 پاسخ 452 بازدید
0 امتیاز
1 پاسخ 483 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط ehsolimo (302 امتیاز)
+1 امتیاز
1 پاسخ 523 بازدید
0 امتیاز
1 پاسخ 1.9هزار بازدید
0 امتیاز
1 پاسخ 683 بازدید
+2 امتیاز
2 پاسخ 1.3هزار بازدید
+4 امتیاز
1 پاسخ 2.7هزار بازدید
...