Java基础 static关键字修饰成员变量详解

很多初学的小伙伴都认为static关键字难以理解,容易和其他关键字混淆,特别是搭配使用的时候。static关键字的用法其实并不难理解,关键在于是否熟练关键字的具体概念以及相关用法。只有把概念彻底吃透了,才能运用到逻辑中。毕竟,“先有模仿,才能创造”。

static修饰成员变量

static修饰成员变量,该变量属于类级别,在对象创建之前就已经在内存中加载好,每一个对象都共享这一个静态变量,通过(创建不同的对象调用,但没必要)类名.属性名的方式可以获取到属性,也可以修改属性值,因为是共享所以,可以被随意更改,获取到的属性值,与上一次被修改后的值一致

package Demo01;

public class Dog {
    static String name = "金毛";
}


package Demo01;

public class Test {
    public static void main(String[] args) {
        Dog dog1 = new Dog();
        System.out.println(dog1.name = "泰迪");//泰迪

        Dog dog2 = new Dog();
        System.out.println(dog2.name = "边牧");//边牧

        Dog dog3 = new Dog();
        System.out.println(dog3.name);//边牧
    }
}

运行结果:
泰迪
边牧
边牧

不通过创建对象结果也是一样,因为static修饰的成员变量已经是属于类了,创建对象之前就已经存在(以上创建对象获取静态成员变量的方式仅作为理解,实际开发不要这样写)

package Demo01;

public class Test {
    public static void main(String[] args) {
        System.out.println(Dog.name = "泰迪");//泰迪
        System.out.println(Dog.name = "边牧");//边牧
        System.out.println(Dog.name);//边牧
    }
}

运行结果:
泰迪
边牧
边牧

final static修饰成员变量

final意为“最终的,不可更改的”,final static修饰成员变量后,成员变量将不可以随意更改,仅仅可以获取,如果强行更改属性值会报错:Cannot assign a value to final variable 'name',无法更改一个被final修饰的"name"

package Demo01;

public class Dog {
    final static String name = "金毛";
}


package Demo01;

public class Test {
    public static void main(String[] args) {
        System.out.println(Dog.name = "泰迪");//报错:Cannot assign a value to final variable 'name'
        System.out.println(Dog.name = "边牧");//报错:Cannot assign a value to final variable 'name'
        System.out.println(Dog.name);//金毛
    }
}

private static修饰成员变量

private意为“私有的,独有的”,private static修饰成员变量后,外部类将直接无法获取到静态成员变量,强行获取会报错:'name' has private access in 'Demo01.Dog',静态成员变量'name'已经在Demo01.Dog这个类中私有化,外部类Demo01.Test不可访问这个静态变量

package Demo01;

public class Dog {
    private static String name = "金毛";
}


package Demo01;

public class Test {
    public static void main(String[] args) {
        System.out.println(Dog.name = "泰迪");//报错:'name' has private access in 'Demo01.Dog'
        System.out.println(Dog.name = "边牧");//报错:'name' has private access in 'Demo01.Dog'
        System.out.println(Dog.name);//报错:'name' has private access in 'Demo01.Dog'
    }
}

那我们如何访问或修改private static修饰的成员变量呢?

可以用get 或set方法(因为是静态修饰,静态成员变量属于类,所以调用get或set方法直接 类名.属性名 即可)

package Demo01;

public class Dog {
    private static String name = "金毛";

    //get方法
    public static String getName() {
        return name;
    }

    //set方法
    public static void setName(String name) {
        Dog.name = name;
    }
}


package Demo01;

public class Test {
    public static void main(String[] args) {
        System.out.println(Dog.getName());//用get方法获取私有化的静态成员属性"金毛"

        Dog.setName("泰迪");//调用set方法修改私有化的静态成员属性
        System.out.println(Dog.getName());//用get方法获取更改后的属性"泰迪"
    }
}

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值