如何解释构造函数中的返回语句?

2022-09-03 17:22:37

据我所知,构造函数不返回任何内容,甚至不返回 void ,

以及

return ;

内任何方法都意味着返回 void 。

所以在我的程序中

public class returnTest {

    public static void main(String[] args) {
        returnTest obj = new returnTest();
        System.out.println("here1");

    }

    public returnTest () 
    {
        System.out.println("here2");
        return ;
    }
    }

我在打电话

return;

这将返回VOID,但构造函数不应该返回任何东西,程序编译得很好。

请解释。


答案 1

return在构造函数中,只是在指定点跳出构造函数。如果在某些情况下不需要完全初始化类,则可以使用它。

例如:

// A real life example
class MyDate
{
    // Create a date structure from a day of the year (1..366)
    MyDate(int dayOfTheYear, int year)
    {
        if (dayOfTheYear < 1 || dayOfTheYear > 366)
        {
            mDateValid = false;
            return;
        }
        if (dayOfTheYear == 366 && !isLeapYear(year))
        {
            mDateValid = false;
            return;
        }
        // Continue converting dayOfTheYear to a dd/mm.
        // ...

答案 2

return可用于立即离开构造函数。一个用例似乎是创建半初始化的对象。

人们可以争论这是否是一个好主意。恕我直言,问题在于生成的对象很难处理,因为它们没有任何可以依赖的不变量。

到目前为止,在我所看到的在构造函数中使用的所有示例中,代码都是有问题的。通常,构造函数太大,包含的业务逻辑太多,因此难以测试。return

我见过的另一种模式是在构造函数中实现控制器逻辑。如果需要重定向,构造函数将存储重定向并调用 returned。除了这些构造函数也很难测试之外,主要问题是,每当必须使用这样的对象时,你必须悲观地假设它没有完全初始化。

最好将所有逻辑排除在构造函数之外,并瞄准完全初始化的小对象。然后,您很少(如果有的话)需要调用构造函数。return