类变量和类方法

一.类变量

1.类变量引出

假如我们有一群小孩子在打雪仗,打雪仗的过程中,不断有新的小孩子加入,那么我们统计最后一共有多少小孩子打雪仗了......

传统的方法肯定是先定义一个孩子类,该类下定义一个打雪仗方法,然后在对象外面定义一个计数的变量,该变量在每次调用打雪仗方法的时候都执行一次,进行累加,代码如下:

package com.study.static_;

public class ChildGame {
    public static void main(String[] args) {
        int count = 0;
        Child child1 = new Child("小王");
        Child child2 = new Child("小张");
        Child child3 = new Child("小强");
        child1.play();
        count++;
        child2.play();
        count++;
        child3.play();
        count++;
        System.out.println("最终打雪仗的有"+count+"人");
    }
}
class Child{
    public String name;

    public Child(String name) {
        this.name = name;
    }
    public void play(){
        System.out.println(name+"加入了打雪仗");
    }
}

运行结果:

 问题分析:

count是一个独立于对象,很尴尬啊,我们访问count很麻烦,没有用到oop,因此我们引出类变量/静态变量。

2.什么是类变量

类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。

3.定义类变量(语法)

访问修饰符 static 数据类型 变量名 ;【推荐】

static 访问修饰符 数据类型 变量名;

4.访问类变量

类名.类变量名【推荐】

对象名.类变量名

静态变量的访问修饰符的访问权限和范围和普通属性是一样的

对打雪仗代码优化如下:

package com.study.static_;

public class ChildGame {
    public static void main(String[] args) {
        Child child1 = new Child("小王");
        Child child2 = new Child("小张");
        Child child3 = new Child("小强");
        child1.join();
        Child.count++;
        child2.join();
        Child.count++;
        child3.join();
        Child.count++;
    }
}
class Child{
    public String name;
    public static int count=1;

    public Child(String name) {
        this.name = name;
    }
    public void join(){
        System.out.println(Child.count+"加入了打雪仗");
    }
}

 5.注意事项

1.当需要让某个类所有对象都共享一个变量时,可以考虑使用类变量。

2.类变量是在类加载时就初始化了,也就是说,即使没有创建对象,只要类加载了,就可以使用类变量,sure也会随着类消亡而消亡。

二.类方法

1.类方法引出

如果我们希望不创建实例,也可以调用某个方法 ( 即当做工具来使用 ) ,这时把方法做成静态方法时非常合适

 2.定义类方法(语法)

访问修饰符 static 数据返回类型 方法名();【推荐】

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

3.类方法的调用

类名.类方法名【推荐】

对象名.类方法名

4.使用细节

1.类方法中无this的参数,普通方法中隐含着this的参数,二者都是随着类的加载而加载,将结构信息存储在方法区;

2.类方法中不允许使用和对象有关的关键字,比如super ,this;

3.类方法中只能访问静态方法或静态变量

package com.study.static_;

public class StaticMethod {
    public static void main(String[] args) {
        Student.Payfee(100);
        Student.Payfee(100);
        Student.Showfee();
    }
}
class Student{
    private String name;
    private static double fee;

    public Student(String name) {
        this.name = name;
    }
    public static void Payfee(double fee){
        Student.fee+=fee;
    }
    public static void Showfee(){
        System.out.println("总学费:"+Student.fee);
    }
}

上述代码中fee是静态变量,所以在类方法每次被调用的时候,用的该变量都是同一个,所以最后输出结果应为100+100=200。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小白初级

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

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

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

打赏作者

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

抵扣说明:

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

余额充值