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 پاسخ 567 بازدید
0 امتیاز
1 پاسخ 342 بازدید
+1 امتیاز
1 پاسخ 349 بازدید
0 امتیاز
1 پاسخ 309 بازدید
سوال شده 8 سال قبل در برنامه نویسی توسط ehsolimo (302 امتیاز)
+1 امتیاز
1 پاسخ 390 بازدید
0 امتیاز
1 پاسخ 1.7هزار بازدید
0 امتیاز
1 پاسخ 521 بازدید
+2 امتیاز
2 پاسخ 1.1هزار بازدید
+4 امتیاز
1 پاسخ 2.4هزار بازدید
...