在我的教科书中它提到,无论何时你想立即结束一个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();
}
我的教科书有没有忘记提及的内容了??
答案 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
,而不是do
,while
或for
循环),因此这将使您的代码编译:
if(true) {
return;
}
答案 1 :(得分:5)
您将在返回后立即收到错误消息,因为您永远无法到达那里。尝试类似:
if(some condition)
{
return;
}
答案 2 :(得分:2)
其他答案是正确和完整的 - javac不会编译一些无法访问的代码,因此您不能在代码中间放置break
或throw
语句。但是,因为有时候这正是你想要做的事情(例如,因为你正在测试某些东西),你可以从测试不是很彻底的事实中受益。这样的事情会做:
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();
}
或完全删除它。我假设你想要回报,因为你正在测试某些东西,或者想要在一年/一月之后再做。