JAVA基础(关键字--static)

1,static 特点

  • 随着类的加载而加载

  • 优先于对象存在

  • 被类的所有对象共享

        举例:咱们班级的学生应该共用同一个班级编号。

        其实这个特点也是在告诉我们什么时候使用静态?

             如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。

        举例:

            * 饮水机(用静态修饰)

            * 水杯(不能用静态修饰)

            * 共性用静态,特性用非静态

2,static 调用

  • 可以通过类名调用

  • 其实它本身也可以通过对象名调用。

  • 推荐使用类名调用。

  • 静态修饰的内容一般我们称其为:与类相关的,类成员

class Demo1_Static {

    public static void main(String[] args) {

        /*Person p1 = new Person();    //创建对象

        p1.name = "苍老师";            //调用姓名属性并赋值

        p1.country = "日本";        //调用国籍属性并赋值

        Person p2 = new Person();

        p2.name = "小泽老师";        //调用姓名属性并赋值

        //p2.country = "日本";        //调用国籍属性并赋值

        p1.speak();

        p2.speak();*/

        Person.country = "日本";    //静态多了一种调用方式,可以通过类名.

        System.out.println(Person.country);

    }

}

class Person {

    String name;                    //姓名

    static String country;                    //国籍

    public void speak() {            //说话的方法

        System.out.println(name + "..." + country);

    }



}
  • 创建对象内存图

  • 创建静态内存图

3,static的注意事项

  • 在静态方法中是没有this关键字的

    • 静态是随着类的加载而加载,this是随着对象的创建而存在。

    • 静态比对象先存在。

  • 静态方法只能访问静态的成员变量和静态的成员方法

    • 静态方法:

      • 成员变量:只能访问静态变量

      • 成员方法:只能访问静态成员方法

    • 非静态方法:

      • 成员变量:可以是静态的,也可以是非静态的

      • 成员方法:可是是静态的成员方法,也可以是非静态的成员方法。

  • 简单记:静态只能访问静态。

  • 静态像解压文件。 非静态是压缩文件。

class Demo2_Static {

    public static void main(String[] args) {

        //Demo d = new Demo();

        //d.print1();





        Demo.print2();

    }

}



class Demo {

    int num1 = 10;                        //非静态的成员变量

    static int num2 = 20;                //静态的成员变量

    public void print1() {                //非静态的成员方法,既可以访问静态的成员也可以访问非静态的

        System.out.println(num1);

        System.out.println(num2);

    }

    public static void print2() {        //静态的成员方法

        //System.out.println(this.num1);//静态的成员方法不能访问非静态的,错误: 无法从静态上下文中引用非静态 变量 num1

        System.out.println(num2);

    }

}

4, 静态变量和成员变量的区别

【1】所属不同

  • 成员变量: 所属与对象,随着对象的创建而存在

  • 静态变量: 所属与类,又称之为类变量,随着类的加载而加载

【2】内存中位置不同

  • 成员变量: 存在于堆内存中

  • 静态变量: 存在于方法区中的静态区(共享区)

【3】内存加载时间不同

  • 成员变量: 随着对象的创建而存在,对着对象的消失而消失

  • 静态变量: 随着类的加载而加载,随着类的消失而消失

【4】调用不同:

  • 成员变量: 对象名.成员变量

  • 静态变量: 可以通过类名.调用。也可以通过对象名调用,推荐使用类名调用.


 

class Demo3_Static {

    public static void main(String[] args) {

        //method();                                //错误: 无法从静态上下文中引用非静态 方法 method()

        Demo3_Static.print();                    //在主方法中调用本类的静态方法,可以省略类名.,系统会默认加上

        Demo3_Static d = new Demo3_Static();    //非静态方法在调用的时候必须创建对象调用

        d.method();

    }





    public void method() {                    

        System.out.println("Hello World!");        

    }





    public static void print() {

        System.out.println("Hello World!");

    }

}

猜你喜欢

转载自blog.csdn.net/Cricket_7/article/details/91779557