面向对象进阶篇13-static关键字修饰变量

基本概念

static可以用来修饰属性、方法、代码块、内部类

使用static修饰属性:静态变量(类变量)

1、按是否使用static修饰,又分为静态属性和非静态属性(实例变量)

实例变量,当创建了类的多个对象,每个对象都独立的拥有一套类的非静态属性,当修改其中一个对象的非静态属性时,不会导致其他对象中同样的属性值的修改。

静态变量,当创建了类的多个对象时,所有对象都共享同一个静态变量。当通过某一个对象修改静态变量时,其他对象使用该静态变量时,也一并被修改了。

2、static修饰属性的其他说明

1)静态变量随着类的加载而加载

2)静态变量的加载早于对象的创建

3)因为类只会加载一次,所以静态变量在内存中也会存一份,存在方法区的静态域中。

4)类变量 VS 实例变量的使用

                类变量                    实例变量

类                Yes                        No

对象            Yes                        yes

3、静态变量举例

System.out,Math,PI

代码示例:

public class StaticTest {

    public static void main(String[] args) {

        People c1 = new People();

        c1.name = "张三";

        c1.age=35;

        c1.nation = "CHN";

        People c2 = new People();

        c2.name = "李四";

        c2.age=36;

        System.out.println(c2.nation);//CHN

        c2.nation = "CHINA";

        System.out.println(c1.nation);//CHINA

    }

}

class People{

    String name;

    int age;

    static String nation;

}

2、使用static修饰方法:静态方法

1)随着类的加载而加载,可以直接通过“类.静态方法”的方式进行调用

                    静态方法                非静态方法

类                yes                            no

对象            yes                            yes

2)静态方法中,只能静态的方法或属性

非静态方法中,既可以调用非静态方法或属性,也可以调用静态的方法或属性

public void eat() {

    System.out.println("eat food");

      show();

}

public static void show() {

    System.out.println("I like TV Show");

}

3)在静态方法内,不能使用this、super关键字

什么时候使用static

静态属性:属性时可以被多个对象共享,不会随着对象不同而不同

静态方法:操作静态属性的方法,通常设置为static;工具类中的方法,一般声明为static的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容