Java之类变量和类方法(static)

1.引出类变量

面向对象希望对象和属性绑定

package com.hansp.static_;

public class ChildGame {
    public static void main(String[] args) {
        int count=0;
        Child c1 = new Child("白骨精");
        c1.join();
        count++;
        Child c2 = new Child("狐狸精");
        c2.join();
        count++;
        Child c3 = new Child("老鼠精");
        c3.join();
        count++;
        System.out.println("共有"+count+"小孩加入了游戏");

    }

}
class Child{
    private String name;

    public Child(String name) {
        this.name = name;
    }
    public void join(){
        System.out.println(name+"加入了游戏");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

我们在主方法里定义了局部变量的count来记录加入的小孩数

不太符合我们面向对象的编程思想

所以我们既要

使每个对象有count属性,还要使对象操作的是同一个count来计数

怎么办呢

这时就有static变量了

我们可以

class Child{
    private String name;
    private static int count;//加入的代码!!!!!!,这个就是类变量(static)

    public Child(String name) {
        this.name = name;
    }
    public void join(){
        System.out.println(name+"加入了游戏");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

这样的话

该属性最大的特点就是,会被Child类的所有对象的实例共享

2.探讨内存布局

这里我们来看类变量的的内存布局

这里分两种情况

如果你的jdk版本是在jdk7及之前

认为是在方法区里的静态域 

jdk7之后的话认为是在堆里的

Class对象(随着类加载而出来的)的最后

所有的child对象共享一个count变量 

类变量

3. 类变量的访问

例如之前的Child

有c1,c2和c3三个变量

可以用c1.count访问//这种情况必须先创建对象访问

最好的方法是用Child.count来访问count变量(规范)

这种情况不用创建对象即可访问(遵守访问权限),因为类变量是随着类的加载而创建的

所以没有创建对象也可以访问

一些注意事项 

4.类方法 

定义方式

访问修饰符 static 数据返回类型 方法名(){

}//推荐

 static 访问修饰符 数据返回类型 方法名(){

}//也可以

使用方式

通过类名.方法名调用(遵循访问原则)(推荐)

或者通过对象名.方法名(遵循访问原则)

案例

这段代码很有意思,可以分析分析

我们把静态变量放入了构造器得到了我们并不想要的答案,所以我们最好不要将静态变量放入构造器中

这样就对了

当然s2.show()可以换为Stu.show() 

Stu.payFee()也可以换成对于的变量调用操作的都是同一个值

经典使用场景

总而言之,工具类 ,适合用静态方法,从而不创建对象直接类名.方法名调用

注意事项

 

 4和5尤其注意,容易出错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值