局部变量:从属于方法、语句块,只在所属区域有效
声明位置:方法、语句块内部
生命周期:从声明位置开始到方法或语句块执行完毕,局部变量消失
成员变量:成员变量会自动被初始化
声明位置:类内部,方法外部
1.实例变量(不用static修饰)
从属于对象
生命周期:与对象一致
2.静态变量(static修饰)
从属于类
生命周期:与类一致,类被加载,静态变量就有效;类被卸载,静态变量消失;
静态方法只能访问静态属性
静态方法不能使用this关键字
静态方法不能调用非静态方法,反之可以
非静态方法既能访问静态属性,也能访问非静态属性
非静态方法不能定义静态变量
静态变量(属性)与非静态变量(属性)的区别
class Beauty {
int age1; //非静态属性age1
static int age2; //静态属性age2
}
class TestPerson {
public static void main(String[] args) {
Beauty b1 = new Beauty();
b1.age2 = 20;
Beauty b2 = new Beauty();
b2.age2 = 10; //运行结果都是10,静态变量在类加载的时候就被分配了一个地址,地址里面存它的值,然后这个类的对象的该属性都是找这个地址,从该地址里面找值
//相当于静态变量在该类中是共享的
//普通变量只有在创建对象的时候才会分配地址
System.out.println(b1.age2); //非静态属性只能通过对象访问
System.out.println(b2.age2); //静态属性既可通过 类名 也可通过 对象 访问
}
}