Agg*_*sor 0 java android instantiation instance android-fragments
我遇到了一段有趣的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);
}
}
Run Code Online (Sandbox Code Playgroud)
否则此代码中的其他位置是否创建了构造函数.没有
public SimpleContentFragment() {
// Required empty public constructor
}
Run Code Online (Sandbox Code Playgroud)
正如我所料.
那么你能用newInstance澄清静态方法中发生了什么吗?new SimpleContentFragment()当构造函数从未写入时它怎么能调用?
这是因为如果没有提供,Java将创建一个默认的无参数构造函数.它将所有引用字段设置为null,将数字类型设置为0,将布尔值设置为false,并调用超类构造函数.
如果类不包含构造函数声明,则隐式声明默认构造函数.顶级类,成员类或本地类的默认构造函数的形式如下:
默认构造函数具有与类相同的可访问性(第6.6节).
默认构造函数没有形式参数,除非在非私有内部成员类中,默认构造函数隐式声明一个形式参数,表示该类的直接封闭实例(§8.8.1,§15.9.2,§15.9.3) ).
默认构造函数没有throws子句.
如果声明的类是原始类Object,则默认构造函数具有空体.否则,默认构造函数只调用不带参数的超类构造函数.
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |