发布网友 发布时间:2022-07-04 02:59
共3个回答
热心网友 时间:2023-10-06 18:03
1. static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。 2. static代码块 static代码块是类加载时,初始化自动执行的。如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。 3. static方法 static方法可以直接通过类名调用,任何的实例也都可以调用,因此static方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。 static方法只能访问static的变量和方法,因为非static的变量和方法是需要创建一个对象才能访问的,而static的变量/方法不需要创建任何对象。 ********static的数据或方法,属于整个类的而不是属于某个对象的,是不会和类的任何对象实例联系到一起。所以子类和父类之间可以存在同名的static方法名,这里不涉及重载。所以不能把任何方法体内的变量声明为static,例如:fun() { static int i=0; //非法。}其实理解static是只有一个存储地方,而使用时直接使用,不需要创建对象,就能明白以上的注意事项。 另外,一般的类是没有static的,只有内部类可以加上static来表示嵌套类。热心网友 时间:2023-10-06 18:04
使用静态变量public static int state = 0;热心网友 时间:2023-10-06 18:04
[java] view plain copy
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ErrorTestActivity extends Activity {
/** Called when the activity is first created. */
private static boolean Flag = false;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i("wangchao","wocao"+Flag);
Flag = true;
}
}
当窗口消毁时,Activity的静态变量是存在的,因为静态变量是属全局变量、静态变量是整个应用程序的公共变量(即使上面写的是私有),所以Activity消毁时,静态变量是不会清除的。但当什么时候才会清除呢,
重写onDestory方法,在onDestory里添加android.os.Process.killProcess(android.os.Process.myPid());把线程干掉,再次调用就正常了。
上面说过静态变量是整个应用程序的,所以只有当各个应用程序的进程消毁时,静态变量才会毁,所以调用android.os.Process.killProcess(android.os.Process.myPid());就正常了。