class Summarize_Static {
public static void main(String[] args) {
Phone p1 = new Phone();//创建对象p1,此时无参构造已经给p1的成员变量进行了默认初始化
p1.show();
p1.setBrand("OPPO");
p1.setPrice(2500);//在此处已经给成员变量进行了赋值
p1.show();
Phone p2 = new Phone(); //不给p2中的price赋值的话,看看输出的结果
p2.setBrand("三星");
p2.show();
/*结果输出 品牌:三星, 价格:2500 ,结果还是有price,说明p2也调用了p1.setPrice赋给price的值,而静态
被存储的位置是方法区Phone.class区域的静态区,而对象是存储在堆中的
*/
p2.setPrice(3000);
p2.getPrice();
p1.getPrice();
System.out.println(p2.getPrice() + " , " + p1.getPrice());//结果输出3000,3000
//说明p1和p2共用的一个成员变量price
}
}
/*
定义一个手机类
成员变量:品牌brand,价格price
空参,有参
setXXX方法和getXXX方法
*/
class Phone {
private String brand;
private static int price;
public Phone() {}
public Phone(String brand,int price) {
this.brand = brand;
this.price = price;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getBrand() {
return brand;
}
public void setPrice(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
public void show() {
System.out.println("品牌:" + brand + ", 价格:" + price);
}
}
/*
static是个关键字,表示静态,它的作用是:如果一个类中的某个成员对象加了静态,那么不管通过这个类创建了多少
对象,这个成员变量都是可以被调用的
static关键字的特点
a:随着类的加载而加载
b:优先于对象存在:随着字节码文件的加载而加载的,那时候还没有对象呢!
c:被类的所有对象共享
* 举例:咱们班级的学生应该共用同一个班级编号。
* 其实这个特点也是在告诉我们什么时候使用静态?
* 如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
* 举例:
* 饮水机(用静态修饰)
* 水杯(不能用静态修饰)
* 共性用静态,特性用非静态
d:可以通过类名调用
* 其实它本身也可以通过对象名调用。
* 推荐使用类名调用。
* 静态修饰的内容一般我们称其为:与类相关的,类成员(静态变量:类变量,静态方法:类方法)
静态是随着类的加载而加载,而this是随着对象的创建而存在,所以静态比对象先出现,静态加载的时候可能还没有
对象呢,所以静态只能访问静态(调用的静态的方法中不能存在非静态的变量)
*/
|
|