用return结束void方法;

时间:2013-11-04 21:59:11

标签: java methods void

在我的教科书中它提到,无论何时你想立即结束一个void方法,你都可以引入回归;但是,我尝试在eclipse上实现它,它似乎不起作用。我试图在变量日结束方法。我收到一条错误消息,说我的其余代码无法访问。

public void readInput(){
    Scanner myKeyboard = new Scanner(System.in);
    System.out.println("Enter the day");
    day = myKeyboard.nextInt();
    return; //error is here
    System.out.println("Enter the year");
    year = myKeyboard.nextInt();
    System.out.println("Enter the month");
    month = myKeyboard.next();
}

我的教科书有没有忘记提及的内容了??

4 个答案:

答案 0 :(得分:10)

在Java中,it's illegal to include code that can't ever possibly be executed(因为这几乎总是一个错误)。在您的代码中,您无条件地调用return,然后在此之后有额外的代码 - 这称为无法访问的代码,这会导致编译器错误。

在方法中间使用return是为了有条件时,例如

if(exitNow) { 
    return;
}

然后程序可能会继续执行剩余的代码。要测试一下,试试这个:

if(day == 0) {
    return;
}

正如@fdreger所提到的,JLS特别指出,即使if语句的条件是编译时常量,编译器也会将if视为条件不确定(这适用)仅限if,而不是dowhilefor循环),因此这将使您的代码编译:

if(true) {
    return;
}

答案 1 :(得分:5)

您将在返回后立即收到错误消息,因为您永远无法到达那里。尝试类似:

if(some condition)
{
   return;
}

答案 2 :(得分:2)

其他答案是正确和完整的 - javac不会编译一些无法访问的代码,因此您不能在代码中间放置breakthrow语句。但是,因为有时候这正是你想要做的事情(例如,因为你正在测试某些东西),你可以从测试不是很彻底的事实中受益。这样的事情会做:

if (2+2==4) return;

答案 3 :(得分:0)

错误消息是正确的。其余代码无法访问。具体这一节:

System.out.println("Enter the year");
year = myKeyboard.nextInt();
System.out.println("Enter the month");
month = myKeyboard.next();

它是“无法访问的”,因为return语句将使它从函数返回。

如果您希望在

之后测试从方法返回
day = myKeyboard.nextInt();

只需删除退货并注释掉其他部分。

public void readInput(){
    Scanner myKeyboard = new Scanner(System.in);
    System.out.println("Enter the day");
    day = myKeyboard.nextInt();
    // System.out.println("Enter the year");
    // year = myKeyboard.nextInt();
    // System.out.println("Enter the month");
    // month = myKeyboard.next();
}

或完全删除它。我假设你想要回报,因为你正在测试某些东西,或者想要在一年/一月之后再做。