Static 关键字
public class Demo03 {
public static void main(String[] args) {
Human person = new Human();
person.name = "bb";
person.age = 18;// 引用可以直接调用非静态的成员
person.height = 170;// 引用也可以调用静态的成员,但是系统不推荐person.show();
person.eat();Human.height = 30;// 通过类名直接调用静态的成员
// Human.age = 4;类名 不能调用非静态的成员
}
}class Human {
String name;
int age;
static int height;// 静态的成员变量public void show() {
System.out.println("show");
}public static void eat() {// 静态的成员方法
System.out.println("eat");
}
}
比较成员变量与局部变量
- 作用域: 成员变量的作用域是整个对象。局部变量的作用域是从定义开始到所在函数结束。
- 默认值: 成员变量会有默认值。 局部变量没有默认值,要想使用必须赋值。
- 释放机制:成员变量跟对象保持一致,通过垃圾回收机制是释放。 局部变量是使用完立即释放。
- 存放的位置:成员变量存放在堆区中的对象中。 局部变量存放在栈区的方法中。
成员变量——静态的(被修饰的)和非静态的成员变量。
- 静态 : 静态的方法和变量——既可以通过引用调用又可以通过类名调用。(推荐类名调用)
- 非静态: 非静态的调用方法,需要创建对象,使用引用调用。
为什么可以通过类名直接调用静态的成员变量?
答:当成员被static修饰之后就变成了静态的,会在class生成的同时放在静态方法区中一份,而静态方法区的特点是内容会随着
程序的结束而释放,所以对象的创建与否不能影响他们的调用,所以可以直接使用类名调用
静态的成员方法和非静态的成员方法优先使用哪一个?
答:优先使用静态的成员方
原因:静态的方法比非静态的效率高,节省内存.
注意:但是有一种情况例外:当方法中必须使用非静态的成员变量的时候,这时必须使用非静态的方法
成员变量的特点:
- 在创建对象的时候被赋予默认值
- 可以在类中定义变量的时候直接赋值
- 可以在没有static修饰的方法直接使用
总结:
static作用:
-
a.可以修饰成员变量和成员方法。
-
b.作用——保值:使成员的存活时间(生命周期)与程序一致。
被static修饰的成员变量的特点:
-
被当前类的所有对象共享。
-
由随着“”对象“”的加载而加载变成随着“类”的加载而加载,变量被放在了静态方法区,执行顺序优先于非静态的成员变量。
-
可以使用类名或引用调用