返回不需要的东西(编译器)

时间:2014-03-08 06:34:10

标签: java

在此代码中:

任何人都可以解释我..为什么我们需要返回"错误" ?

在一些整数方法中(不在此代码中)..为什么使用return 0

package chapter4;

import java.util.Scanner;
class DateThirdTry
{
    private String month;
    private int day;
    private int year; //a four digit number.
    public void setDate(int newMonth, int newDay, int newYear)
    {
        month = monthString(newMonth);
        day = newDay;
        year = newYear;
    }
    public void writeOutput()
    {
        System.out.println(month + " " + day + ", " + year);
    }
    public String monthString(int monthNumber)
    {
        switch (monthNumber)
        {
        case 1:
            return "January";
        case 2:
            return "February";
        case 3:
            return "March";
        case 4:
            return "April";
        case 5:
            return "May";

        case 6:
            return "June";
        case 7:
            return "July";
        case 8:
            return "August";
        case 9:
            return "September";
        case 10:
            return "October";
        case 11:
            return "November";
        case 12:
            return "December";
        default:
            System.out.println("Fatal Error");
            System.exit(0);
            return "Error"; //to keep the compiler happy
        }
    }
}
class DateThirdTryDemo
{
    public static void main(String[] args)
    {
        DateThirdTry date = new DateThirdTry( );
        int year = 1882;
        date.setDate(6, 17, year);
        date.writeOutput( );
    }
}

2 个答案:

答案 0 :(得分:2)

1)如果函数具有不返回值的退出路径,Java将给出编译器错误。在Java中,不返回值是非法的。可以说是一件好事。

2)在这种情况下,您的函数调用“System.exit()”而不是返回值。你知道程序不会执行'return“错误”',但你需要添加它来满足编译器。

3)适当的要做的事情是抛出异常。

答案 1 :(得分:1)

这很简单,您的方法monthString()会返回... String

public String monthString(int monthNumber)

因此,您必须返回String而不是int,因此您无法返回0

如果您的方法返回int,则可以返回0

但是,在您的情况下,您应该抛出异常而不是返回“错误”并使用System.exit()这样:

public String monthString(int monthNumber) throws IllegalArgumentException {

扔掉它:

    default:
        System.out.println("Fatal Error");
        throw new IllegalArgumentException("Incorrect month number");

甚至更好,您可以直接使用Java提供的功能来实现您的功能:

public static String monthString(final int monthNumber) {
    final Calendar c = Calendar.getInstance();
    c.set(Calendar.MONTH, monthNumber-1);
    return c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH);
}