Java的变量分为成员变量和局部变量
成员变量:成员变量指的是在类范围里定义的变量(Field)
局部变量:局部变量指的是在方法里定义的变量
成员变量又被分为类Field(以static修饰)和实例Field(不以static修饰)
类Field从这个类的准备阶段起就开始存在了,知道系统完全销毁这个类。它的作用域和它的生存范围相同,它作为类本身的一个成员,跟类本身共存亡,而实例的Field则从该类的实例被创建起开始存在,直到系统完全销毁这个实例。
类Field的访问方法:1,类.类Field,2,实例.类Field(不建议使用这种方式访问类Field)
实例Field的访问方法:实例.实例Field
下面通过代码来熟悉一下上面的概念:
类Tiger
public class Tiger {
public static int eye;
public String name;
}
//进行测试
public class TestActivity extends AppCompatActivity {
private static final String TAG = "TestActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
membership();
}
/**
* 成员变量
*/
private void membership() {
Log.d(TAG, "membership() called获取老虎眼睛:"+Tiger.eye);
Tiger tiger=new Tiger();
Log.d(TAG, "membership() called获取老虎的信息:眼睛的数量="+tiger.eye+"老虎的名字:="+tiger.name);
tiger.name="东北虎";
tiger.eye=3;
实例并不拥有这个类的Field,所以这里tiger.eye=3依然访问的是类的Field,所以它改变的是Tiger.eye的值,访问的是同一块内存,这也是为什么代码没 有给Tiger.eye赋值,但是下面打印出Tiger.eye的值为3
Log.d(TAG, "membership() called老虎的名字="+tiger.name+"老虎的眼睛="+Tiger.eye);
Tiger tiger1=new Tiger();
tiger1.name="华北虎";
这里并未给实例tiger1.eye赋值,但是tiger1.eye的值仍为3,这也说明了tiger1.eye取的类Tiger.eye的值
Log.d(TAG, "membership() called老虎的名字="+tiger1.name+"老虎的眼睛="+tiger1.eye);
tiger=null;
Log.d(TAG, "membership() called老虎的名字="+tiger1.name+"老虎的眼睛="+tiger1.eye+"@@@@@@@@@@@"+Tiger.eye);
Tiger tiger2=new Tiger();
tiger2.eye=2;
这里我明明是设置了tiger2.eye=2,并未修改tiger1.eye的值和Tiger.eye的值,但是tiger1.eye和Tiger.eye的值都发生了改变。,因为其实他们都是访问和操作的Tiger.eye,操作的是同一块内存。
Log.d(TAG, "membership: 老虎的名字="+tiger1.name+"老虎的眼睛="+tiger1.eye+"###########"+Tiger.eye);
}
}
//输出结果:
2019-07-27 09:41:53.380 9477-9477/com.example.hasee.water D/TestActivity: membership() called获取老虎眼睛:0
2019-07-27 09:41:53.380 9477-9477/com.example.hasee.water D/TestActivity: membership() called获取老虎的信息:眼睛的数量=0老虎的名字:=null
2019-07-27 09:41:53.380 9477-9477/com.example.hasee.water D/TestActivity: membership() called老虎的名字=东北虎老虎的眼睛=3
2019-07-27 09:41:53.380 9477-9477/com.example.hasee.water D/TestActivity: membership() called老虎的名字=华北虎老虎的眼睛=3
2019-07-27 09:41:53.380 9477-9477/com.example.hasee.water D/TestActivity: membership() called老虎的名字=华北虎老虎的眼睛=3@@@@@@@@@@@3
2019-07-27 10:07:25.835 11705-11705/com.example.hasee.water D/TestActivity: membership: 老虎的名字=华北虎老虎的眼睛=2###########2
写本文意在巩固自己的理解,如果有错的地方还望斧正。