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 پاسخ 699 بازدید
0 امتیاز
1 پاسخ 477 بازدید
+1 امتیاز
1 پاسخ 456 بازدید
0 امتیاز
1 پاسخ 489 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط ehsolimo (302 امتیاز)
+1 امتیاز
1 پاسخ 533 بازدید
0 امتیاز
1 پاسخ 1.9هزار بازدید
0 امتیاز
1 پاسخ 690 بازدید
+2 امتیاز
2 پاسخ 1.3هزار بازدید
+4 امتیاز
1 پاسخ 2.7هزار بازدید
...