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

时间:2014-11-19 23:15:41

标签: java android android-fragments instance instantiation

我遇到了一段有趣的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()

1 个答案:

答案 0 :(得分:7)

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

JLS 8.8.9

  

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

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

  •   
  • 默认构造函数没有形式参数,但非私有内部成员类除外,其中默认构造函数   隐式声明一个表示立即的形式参数   封闭类的实例(§8.8.1,§15.9.2,§15.9.3)。

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

  •   
  • 如果声明的类是原始类Object,则默认构造函数具有空体。否则,默认   构造函数只调用没有的超类构造函数   参数。

  •