具有内部类的变量范围

时间:2010-09-29 15:34:06

标签: java android scope

我正在Android应用中创建Splash屏幕(Activity)。我有一个扩展AsyncTask的内部类。此内部类的构造函数接受Context对象,该对象在Splash活动的onCreate方法中发送。还有一个常量String字段。

public class Splash extends Activity {
private static final String TAG = "Splash";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    new SplashAsyncTask(this).execute(new Void[] {});
}
private class SplashAsyncTask extends AsyncTask<Void, Void, Void> {
    private Context context;
    public SplashAsyncTask(Context context) {
        this.context = context;
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            Thread.sleep(1500);
        }
        catch(InterruptedException e) {
            if(Constants.LOGGING)
                Log.e(TAG, e.toString());
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
    }
}
}

我应该为private static final String TAG = "Splash";变量使用什么范围?所有范围似乎都很好,但什么是正确/更有效?我注意到eclipse使用public范围声明

自动创建变量

另外,我真的需要将Context对象发送到SplashAsyncTask构造函数吗?或者我可以在我需要Splash.this引用的所有情况下使用Context吗?

1 个答案:

答案 0 :(得分:1)

私有和公共只表明你可以如何访问你的变量,它更像是一个安全的东西,理想情况下,一个类的所有变量都应该是私有的,你应该通过getter和setter方法访问它们。

我认为静态这个词在这里更重要,因为创建一个变量是一件大事,这意味着可以访问该变量而不需要创建一个实例,并且所有共享这个变量的意思是你的意思变量:

public static final String TAG = "Splash";

然后你可以通过写:

来访问它
Splash.TAG

没有制作它的实例,但由于它是私有的你不能但它仍然是一个共享变量,包含你的类所有实例Splash

希望这会有所帮助