Java要求如果在构造函数中调用this()或super(),它必须是第一个语句.为什么?
例如:
public class MyClass {
public MyClass(int x) {}
}
public class MySubClass extends MyClass {
public MySubClass(int a, int b) {
int c = a + b;
super(c); // COMPILE ERROR
}
}
Run Code Online (Sandbox Code Playgroud)
Sun编译器说"调用super必须是构造函数中的第一个语句".Eclipse编译器说"构造函数调用必须是构造函数中的第一个语句".
但是,您可以通过重新安排代码来解决这个问题:
public class MySubClass extends MyClass {
public MySubClass(int a, int b) {
super(a + b); // OK
}
}
Run Code Online (Sandbox Code Playgroud)
这是另一个例子:
public class MyClass {
public MyClass(List list) {}
}
public class MySubClassA extends MyClass {
public MySubClassA(Object item) {
// Create a list …Run Code Online (Sandbox Code Playgroud) 我刚刚浏览了Android Developer Site,刷新了Activity Life周期,在每个代码示例中,超类方法旁边都有一条注释,"首先调用超类方法".
虽然这在创建半周期中有意义:onCreate,onStart和onResume,但我对于破坏半周期的正确程序有点困惑:onPause,onStop,onDestroy.
在破坏实例特定资源可能依赖的超类资源之前,首先销毁实例特定资源是有意义的,而不是反过来.但是注释建议不然.我错过了什么?
编辑:由于人们似乎对问题的意图感到困惑,我想知道的是以下哪一项是正确的?为什么?
1.Google建议
@Override
protected void onStop() {
super.onStop(); // Always call the superclass method first
//my implementation here
}
Run Code Online (Sandbox Code Playgroud)
另一种方式
@Override
protected void onStop() {
//my implementation here
super.onStop();
}
Run Code Online (Sandbox Code Playgroud)