一、static关键字可以修饰的种类
1.使用static关键字修饰一个属性
声明static的变量实质上就是全局变量。
2.使用static关键字修饰一个方法
在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法。
3.使用static关键字修饰一个类
二、案例分析
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Role beibei = new Role("刘备");
Role yunchang = new Role("关羽");
Role feifei = new Role("张飞");
System.out.println(beibei.getInfo());
System.out.println(yunchang.getInfo());
System.out.println(feifei.getInfo());
}
}
class Role {
private String name;
private static String country = "蜀国";//静态变量(全局变量)
public Role(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static String getCountry() {
return country;
}
public static void setCountry(String country) {
Role.country = country;
}
public String getInfo() {
return "name="+name+",country="+country;
}
}
在这个案例中,我们定义了一个名为"Role"的类,其中包含了"name"和"country"两个属性。
如果按照平常的方法,即"name"和"country"都是一个普通的变量,那么物理存储结构为
很明显可以看出,三个"Role"的"country"属性都是相同的,所以其实是对存储空间的一种浪费。
而如果将"country"定义为一个静态变量的话,则"country"则会被放入静态方法区域,减少了内存的占用。
其中,静态方法区存储静态变量,类信息(方法)。
需要特别注意的是,如果要调用静态变量"country",应该避免直接使用对象调用,尽量用类名去调用,因为静态变量是本类所有对象共享的。
三、总结
1.静态变量或方法不属于对象,依赖类
2.静态变量是全局变量,生命周期从类被加载后一直到程序结束
3.静态变量只存一份,在静态方法区域中存放
4.静态变量是本类所有对象共享的
5.建议不要使用对象名去调用静态数据,直接使用类名调用
6.static修饰一个方法,那么该方法属于类,不属于对象,直接用类名调用
7.静态方法不能访问非静态属性和方法,只能访问静态的
(参考:Bilibili up主:千峰Java)