Java关键字—static

1 static关键字的引入

​ 当我们编写一个类的时候,其实就是描述类的属性和行为,而并没有实质上的对象,只有通过 new 关键字才能产生对象,这时系统才会分配内存空间给对象,其方法才能被外部调用。

​ 但是有时我们希望无论产生多少对象,某些特定的数据在内存空间中只有一份。例如所有中国人都共享中国这个国家名称,不必再每一个中国人的实例对象中都分配一个用于代表国家名称的变量,这时就可以使用 static 关键字

2 static的使用

static:静态的

可以修饰的结构:属性、方法、代码块、内部类(在这里我们先讨论修饰属性和方法的情况)

不管修饰什么结构,该结构都会随着类的加载而加载

2.1 使用static修饰属性

属性按是否有static修饰可分为 静态属性(类变量)和非静态属性(实例属性)

非静态变量:当我们创建了一个类的多个对象,每个对象都各自拥有一套该类的非静态属性,当改变其中一个对象的非静态属性后,不会影响其余对象的非静态属性

静态变量:当我们创建了一个类的多个对象,每个对象都共享该类的非静态属性,当通过某个对象修改静态变量时,会导致其他对象调用时该静态变量是修改过的

说明:①:静态变量随着类的加载而加载,可以通过类.静态变量调用

​ ②:静态变量的加载早于对象的创建

​ ③:由于类只加载一次,所以静态变量在内存中也只存在一份,存在方法区的静态域

2.2 使用static修饰方法

①:随着类的加载而加载

②:静态方法只能调用静态属性和静态方法

​ 非静态方法既能调用静态属性,也能调用非静态属性,静态方法,非静态方法

​ 这个我们可以通过生命周期的角度来考虑,首先是类加载到方法区,然后才是创建对象

③:static方法中,不能使用this或者super关键字

class Person{
    
    
    
    String name;
    int age;
    static String country = "中国";	//将国家设置为静态变量
    
    public void eat(){
    
    
        //非静态方法可以调用静态属性,静态方法和非静态属性,非静态方法
    }
    
    public static void sleep(){
    
    
        //静态方法只能调用静态属性,静态方法,不能调用非静态属性,非静态方法
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45321793/article/details/109366289