繁体   English   中英

如果没有编写构造函数,newInstance()如何工作?

[英]How Can newInstance() Work If There Is No Constructor Written?

我遇到了一个有趣的Java代码段。 我研究了newInstance()是什么,这是避免调用构造函数并创建对象的新实例的一种方法。 但是看示例代码,我不明白一件事:为什么不需要构造函数?

    public class SimpleContentFragment extends WebViewFragment {

      protected static SimpleContentFragment newInstance(String file) {
        SimpleContentFragment f=new SimpleContentFragment();

        Bundle args=new Bundle();

        args.putString(KEY_FILE, file);
        f.setArguments(args);

        return(f);
      }
    }

在此代码的其他地方没有创建构造函数。 没有

public SimpleContentFragment() {
        // Required empty public constructor
    }

正如我所期望的。

那么您能否阐明newInstance的静态方法中发生了什么? 从未编写构造函数时,如何调用new SimpleContentFragment()

这是因为如果没有提供,则Java将创建默认的无参数构造函数。 它将所有引用字段设置为null ,数值类型设置为0,布尔值设置为false并调用超类构造函数

JLS 8.8.9

如果一个类不包含构造函数声明,则默认构造函数被隐式声明。 顶级类,成员类或本地类的默认构造函数的形式如下:

  • 默认构造函数具有与类(第6.6节)相同的可访问性。

  • 除了在非私有内部成员类中以外,默认构造函数没有形式参数,在默认情况下,默认构造函数隐式声明一个表示该类的立即封闭实例的形式参数(第8.8.1节,第15.9.2节,第15.9.3节) )。

  • 默认构造函数没有throws子句。

  • 如果要声明的类是原始类Object,则默认构造函数的主体为空。 否则,默认构造函数将简单地调用不带参数的超类构造函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM