gpt4 book ai didi

java - 具有内部类的变量作用域

转载 作者:行者123 更新时间:2023-12-01 16:01:16 24 4
gpt4 key购买 nike

我正在我的 Android 应用程序中创建一个 Splash 屏幕(Activity)。我有一个扩展 AsyncTask 的内部类。此内部类的构造函数接受 Context 对象,该对象在 Splash Activity 的 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 构造函数吗?或者我可以/应该在所有需要 Context 引用的情况下使用 Splash.this 吗?

最佳答案

private 和 public 仅指示如何访问变量,这更多的是安全问题,理想情况下类的所有变量都应该是私有(private)的,并且您应该通过 getter 和 setter 方法访问它们。

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

public static final String TAG = "Splash";

然后您可以通过编写以下内容来访问它:

Splash.TAG

没有创建它的实例,但由于它是私有(private)的,所以你不能,但它仍然是一个与你为 Splash 类创建的所有实例共享的变量

希望这有帮助

关于java - 具有内部类的变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com