Java static关键字

static 关键字可用于变量、方法、代码块,表示某个特定的成员只属于某个类本身,而不是该类的某个对象。

1、静态变量

静态变量也叫类变量,它属于一个类,而不是这个类的对象。

public class Man {
    private String name;
    private int age;
    public static int num;

    public Man(String name, int age) {
        this.name = name;
        this.age = age;
        num++;
    }
}

其中,num 被称为静态变量,它有别于 name 和 age 这两个成员变量,因为它前面多了一个修饰符 static。

这意味着无论这个类被实例化对象多少次,静态变量的值都会在所有实例化对象中共享。

Man man = new Man("张三", 32);
Man man2 = new Man("李四",35);

System.out.println(Man.num);

打印结果 num 的值为2,而不是 1。

静态变量和成员变量有着很大的不同,成员变量的值属于某个对象,不同的对象之间,值是不共享的;但静态变量不是的,它可以用来统计对象的数量,因为它是共享的。就像上面例子中的 num,创建一个对象的时候,它的值为 1,创建两个对象的时候,它的值就为 2。

  • 由于静态变量属于一个类,所以不能通过对象引用来访问,而应该直接通过类名来访问;

  • 不需要初始化类就可以访问静态变量

2、静态方法

静态方法也叫类方法,它和静态变量类似,属于一个类,而不是这个类的对象

public static void setNum(int num) {
    Man.num = num;
}

setNum() 就是一个静态方法,它由 static 关键字修饰

回忆一下,我们在这之间其实已经用了很多次静态方法,只是那时候不清楚而已。

简单小结一下:

  • 抽象方法不能是静态方法

  • 静态方法不能使用 this 和 super 关键字

  • 静态方法可以访问所有其他静态方法和静态变量

  • 静态方法无法访问方法和成员变量

3、静态代码块

静态代码块可以用来初始化静态变量,尽管静态方法也可以在声明的时候直接初始化,但有些时候,我们需要多行代码来完成初始化。

public class man{
    public static int age;
    public static String name;

   // 静态初始化块
    static {
        age = 32;
        name = "张三“;
    }
}

静态类成员的注意事项:

  • 类的静态方法中不能调用非静态方法和非静态成员变量(也不能使用 this 和 super )

  • 类的非静态方法中可以调用静态方法和静态成员变量

posted @ 2020-09-01 17:43  Binge-和时间做朋友  阅读(94)  评论(0编辑  收藏  举报