java——面向对象(二)Static关键字

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");
    }
}

 比较成员变量与局部变量

  1. 作用域:  成员变量的作用域是整个对象。局部变量的作用域是从定义开始到所在函数结束。
  2. 默认值:  成员变量会有默认值。              局部变量没有默认值,要想使用必须赋值。
  3. 释放机制:成员变量跟对象保持一致,通过垃圾回收机制是释放。        局部变量是使用完立即释放。
  4. 存放的位置:成员变量存放在堆区中的对象中。       局部变量存放在栈区的方法中。

成员变量——静态的(被修饰的)和非静态的成员变量。

  • 静态 :    静态的方法和变量——既可以通过引用调用又可以通过类名调用。(推荐类名调用)
  • 非静态: 非静态的调用方法,需要创建对象,使用引用调用。

为什么可以通过类名直接调用静态的成员变量?

答:当成员被static修饰之后就变成了静态的,会在class生成的同时放在静态方法区中一份,而静态方法区的特点是内容会随着
 程序的结束而释放,所以对象的创建与否不能影响他们的调用,所以可以直接使用类名调用

静态的成员方法和非静态的成员方法优先使用哪一个?

答:优先使用静态的成员方
       原因:静态的方法比非静态的效率高,节省内存.
       注意:但是有一种情况例外:当方法中必须使用非静态的成员变量的时候,这时必须使用非静态的方法

成员变量的特点:

  1. 在创建对象的时候被赋予默认值
  2. 可以在类中定义变量的时候直接赋值
  3. 可以在没有static修饰的方法直接使用

总结:

static作用:

  • a.可以修饰成员变量和成员方法。

  • b.作用——保值:使成员的存活时间(生命周期)与程序一致。​​​​​​​​​​​​​​

被static修饰的成员变量的特点:

  • 被当前类的所有对象共享。

  • 由随着“”对象“”的加载而加载变成随着“类”的加载而加载,变量被放在了静态方法区,执行顺序优先于非静态的成员变量。

  • 可以使用类名或引用调用

 

猜你喜欢

转载自blog.csdn.net/fang1025780636/article/details/81318701