static关键字

1.含义

static的英文本义是静态的,在java语法中,static既可以修饰成员变量又可以修饰成员方法。被static修饰的成员变量叫作静态成员变量,被static修饰的方法叫作静态成员方法。需要注意的是,在Java中,静态成员(类成员)不属于某个具体的对象,可以被类的所有对象共享(访问、修改)。

2.使用

2.1 static修饰成员变量

被static修饰的成员,储存在方法区当中,它的生命周期伴随类的一生,即随着类的加载而创建,随着类的卸载而销毁。这里我给大家举个例子。

public class Phone {
    private String brand;
    private String color;
    public  int price;
    public static String location;//生产地

}

我们创建了一个Phone类,用static修饰location这个成员,手机有各种各样的品牌、颜色、价格。但是一般我们购买的手机都是在中国生产组装的,所以生产地是一个公共的属性,属于一整个类,而不是某一个对象。

2.2 静态成员的访问

我们可以通过类名.成员的方式进行访问。

public class Dome {
    public static void main(String[] args) {
        System.out.println(Phone.location);
    }
}

也可以使用对象的引用去访问静态成员,不推荐。

public class Dome {
    public static void main(String[] args) {
        System.out.println(Phone.location);

        Phone phone = new Phone();
        System.out.println(phone.location);

    }

}

虽然我们可以通过对象的引用去访问静态成员,但是这里会有一个警告,它提示你使用实例引用访问了静态成员,因为这在语法上虽然可以,但是实际使用过程中可能会产生混淆,给代码阅读者带来不便,也会在编程中产生一些潜在的问题,所以不推荐大家使用实例引用访问。

 2.3 static修饰成员方法

跟成员一样,被static修饰的方法属于类的方法,也就是静态成员方法,当一个方法是以公共使用为目的的,就可以用static修饰成类方法。

public class Phone {
    private String brand;
    private String color;
    public static int price;
    public static String location;//生产地

    public static int getPhonePrice(){
        return price;
    }//获取价格

}

不同的颜色的同一款手机,它的价格是相同的,所以我们可以使用static来修饰getPhonePrice这个方法。

2.4静态成员方法的访问

和静态成类似,静态成员方法的访问也可以通过类名.方法名或者对象的引用的方法来访问,当然不推荐使用对象的引用的方法。

public class Dome {
    public static void main(String[] args) {
        System.out.println(Phone.location);

        Phone phone = new Phone();
        System.out.println(phone.location);

        Phone.getPhonePrice();// 访问静态成员方法

    }

}

需要注意的是,在静态方法中,我们不能访问任何非静态成员。static关键字_第1张图片

当然,在静态成员方法中我们也不能调用非静态成员方法,因为非静态成员方法中带有this关键字,静态方法中调用的时候无法传递this参数。 

2.5 static成员变量的初始化

静态成员变量初始化有两种,分别是就地初始化跟静态代码块初始化。

2.5.1就地初始化

就地初始化指的是在静态成员定义时直接给出初始值

public class Phone {
    private String brand;
    private String color;
    public static int price = 3000;
    public static String location = "中国";//生产地

    public static int getPhonePrice(){
        return price;
    }//获取价格

}

如上代码,给price赋值3000,给location赋值中国。我们在Dome中运行一下代码。

public class Dome {
    public static void main(String[] args) {
        System.out.println(Phone.location);

        Phone phone = new Phone();
        System.out.println(phone.price);

        Phone.getPhonePrice();// 访问静态成员方法

    }

}

运行结果如下:

static关键字_第2张图片

到这里我们基础的static语法就讲解结束了,关于如何通过静态代码块初始化,我将会在代码块的知识中给大家讲解,还有更多关于static关键字的知识,也会再之后娓娓道来。

欢迎大家一键三连!!! 

static关键字_第3张图片

你可能感兴趣的:(Java,java)