static关键字

在java中static可以⽤来修饰成员变量、修饰成员⽅法、构造静态代码块以及实现静态内部类。

1.static修饰成员变量

通常将⽤ static 修饰的成员变量称为 类成员或者静态成员

static 修饰的成员变量与普通成员变量的区别:

static修饰的成员变量

public class test01 {
    private static int age;
    private String name;
    @Override
    public String toString() {
        return "test{" +
                "name='" + name + '\'' +
               "age='"+age+'\''+
                '}';
    }
    public test01(String name, int age) {
        this.name = name;
        this.age=age;
    }
    
}

普通成员变量

public class test03 {
    private String name;
    private int age;

    public test03(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "test03{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 测试

public class test02 {
    public static void main(String[] args) {
        test01 r=new test01("name1",12);
        test01 a=new test01("name2",10);
        System.out.println(r.toString());
        System.out.println(a.toString());
        test03 r1=new test03("name1",18);
        test03 a1=new test03("name2",20);
        System.out.println(r1.toString());
        System.out.println(a1.toString());

    }
}

static成员变量结果

test{name='name1'age='10'}
test{name='name2'age='10'}

普通成员变量 

test03{name='name1', age=18}
test03{name='name2', age=20}

 从结果可以看出static修饰的变量,其输出age都是10,并不是12、10,而普通成员变量正常输出。原因如下

这是因为⽤在 jvm 的内存构造中,会在堆中开辟⼀块内存空间,专⻔⽤来存储⽤ static 修饰的成员 变量,称为静态存储区,⽆论我们创建多少个对象,⽤ static 修饰的成员变量有且只有⼀份存储在静态 存储区中,所以该静态变量的值是以最后创建对象时设置该静态变量的值为准,也就是由于 r1 先设置 age = 12,后来创建了 a1对象,a1将 age 改为了10,最后该静态存储区的 age 属性值也被修改成了 20 

2、修饰修饰成员⽅法   

⽤ static 关键字修饰成员⽅法也是⼀样的道理,我们可以直接通过 类名.静态⽅法名() 的⽅式来调 ⽤,⽽不⽤创建对象

public class test04 {
    public static void test(){
        System.out.println("hello world");
    }
}

 类名.静态⽅法名() 的⽅式来调⽤、⽽不⽤创建对象

public class test02 {
    public static void main(String[] args) {
        test04.test();
    }
}

3、静态代码块

⽤ static 修饰的代码块称为静态代码块,静态代码块可以置于类的任意⼀个地⽅(和成员变量成员 ⽅法同等地位,但不可放⼊⽅法中),并且⼀个类可以有多个静态代码块,在类初次载⼊内存时加载静态 代码块,并且按照声明静态代码块的顺序来加载,且仅加载⼀次,优先于各种代码块以及构造函数

public class test04 {
    static{
        System.out.println("代码块内容编写");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值