有一些基础的知识点,大概知道什么意思,也大体知道它的用法。但是到实际项目中,解决问题的时候,却不能一下子想出来。这时候才深刻的明白学以致用这个词的重要性。
言归正传,什么是static,static有什么作用。静态static变量/方法 在类加载的过程中被初始化,在内存中只存在一份,所以可以把它当作是全局变量/方法。
下面举一个在实际项目中的例子来理解一下static的用法。有一个Dialog类,当点击Dialog中的一个按钮,会调用Logic的A方法,在A方法中做完一些处理之后,会再调用Dialog类中的B方法。此时在B方法中如果用到了一个全局变量,而且这个全局变量是在调用Logic的A方法之后重新赋值的,那么这个全局变量不会反应重新赋值之后的对象,而是重新赋值之前的对象。
原因就是这个全局变量不是static的,它的值没有被保持住。如果改为static的话,这个变量的生命周期就和Dialog类保持一致,只要Dialog类没有变,全局变量就能实时保持最新的状态值
举例
Dialog.java
@Override
protected Dialog onCreateDialogSub(Bundle savedInstanceState, Dialog dialog) {
// 全局变量
mDialog = dialog;
logic = new Logic(mDialog, this);
}
private void ClickBtn() {
StudyDownloadDialog dialog = new StudyDownloadDialog(mActivity, DIALOG_TYPE_DOWNLOADING);
dialog.show(manager, TAG_DIALOG);
logic.A();
}
private void upDateProgressBar() {
final ProgressBar progress = (ProgressBar)mDialog.findViewById(R.id.downloading_progress);
}
Logic.java
private void A() {
mDialog.upDateProgressBar(downloadProgress);
}