0
点赞
收藏
分享

微信扫一扫

第十四章 JavaSE专题之面向对象高级一 - 类变量&类方法详述

Resin_Wu 2022-02-10 阅读 64

1、类变量

  • 类变量与实例变量区别(重点)
变量类别变量定义变量调用变量值改变
类变量类中被static修饰类名.变量名/对象名.变量名类变量是所有对象共有,其值只要被其中一个对象改变,其他对象的值就是被改变后的值
实例变量类中不被static修饰对象名.变量名实例变量属于对象私有,某一个值被一个对象改变,该值就只在该对象中起作用。
1.1、类变量引入案例
  • 范例:有一群小孩在玩堆雪人,不时的有新的小孩加入,请问如何知道现在共有多少人在玩?

  • 思路:

    • 1、在main方法中定义一个变量count;
    • 2、当一个小孩加入游戏后count++,最后count就记录有多少小孩玩游戏;
  • 代码

//1、创建类
public class Child {

    private String name;

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


//2、创建main方法
public class hello {
    public static void main(String[] args) {
        //定义一个变量count,统计有多少小孩加入了游戏
        int count = 0;
        Child child1 = new Child("白骨精");
        child1.join();
        count++;

        Child child2 = new Child("狐狸精");
        child2.join();
        count++;

        Child child3 = new Child("老鼠精");
        child3.join();
        count++;
        System.out.println(count);
    }
}
  • 运行结果

在这里插入图片描述

1.2、类变量入门使用
  • 假设:设计一个int count表示总人数,我们再创建一个小孩时,就把count加1,并且count是所有对象共享就ok

  • 问题分析:

    • 1、count是一个独立于对象,很尴尬;
    • 2、以后访问count很麻烦,没有使用到OPP;
    • 3、因此,我们引出类变量/静态变量;
  • 范例:定义一个静态变量count,是一个静态变量:最大特点会被Child所有实例对象共享

//1、创建Child类
public class Child {
    //定义一个变量count,是一个类型变量(静态变量)static静态
    //该变量最大的特点会被Child类的所有对象实例共享

    public static int count = 0;
    private String name;

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

//2、main方法调用
public class hello {
    public static void main(String[] args) {
        //定义一个变量count,统计有多少小孩加入了游戏
        int count = 0;
        Child child1 = new Child("白骨精");
        child1.join();
        //count++;
        child1.count++;

        Child child2 = new Child("狐狸精");
        child2.join();
        //count++;
        child2.count++;

        Child child3 = new Child("老鼠精");
        child3.join();
        //count++;
        child3.count++;
        System.out.println("child1的count值" + child1.count);
        System.out.println("child1的count值" + child2.count);
        System.out.println("child1的count值" + child3.count);
        System.out.println("Child的count值" + Child.count);
    }
}

  • 运行结果

在这里插入图片描述

1.3、类变量详述
  • 类变量:即静态变量/静态属性,是该类的所有对象共享的变量

    • ①任何一个该类的对象去访问它时,取到的都是相同的值;
    • ②同样任何一个该的类的对象去修改它时,修改的也是同一个变量。
    • ③类变量是随着类的加载的创建,所以即使没有创建对象实例也可以访问。
  • 语法格式

访问修饰符 static 数据类型 变量名;
  • 访问格式
类名.类变量名
  • 范例
//1、创建child类
public class Child {
    //定义一个变量count,是一个类型变量(静态变量)static静态
    //该变量最大的特点会被Child类的所有对象实例共享

    public static int count = 0;
    private String name;

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


//2、main方法调用
public class hello {
    public static void main(String[] args) {
        System.out.println("Child的count值" + Child.count);
    }
}
  • 运行结果

在这里插入图片描述

1.4、类变量的细节
  • 使用场景: 我们需要然某个类的所有对象都共享一个变量,可以考虑类变量;

  • 范例

//1、创建类
public class Child {
    //定义一个变量count,是一个类型变量(静态变量)static静态
    //该变量最大的特点会被Child类的所有对象实例共享
    public static int count = 0;

    //普通属性/普通成员变量/非静态属性/非静态成员变量
    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;
    }
}


//2、分别调用类变量和实例变量
public class main {
    public static void main(String[] args) {
        //创建实例
        Child child = new Child("张三");
        //调用类变量
        System.out.println("类Child的count值" + Child.count);

        //调用实例变量
        System.out.println("实例child的count值" + child.getName());
    }
};
  • 运行结果

在这里插入图片描述

2、类方法

  • 定义格式
访问修饰符 static 数据返回类型 方法名(){ }
2.1、类方法与实例方法区别
方法名称方法定义方法调用描述
类方法被static修饰的方法类名.方法名/对象名.方法名不能使用和对象有关的关键字(super、this)
实例方法没有被static修饰的方法对象名.方法名可以使用
  • 范例
//1、创建类,定义类的静态变量和静态方法
class Student {
    //定义一个普通成员
    private String name;

    //定义一个静态变量,来累计学生的学费
    private static double fee = 0;

    public  Student(String name){
        this.name = name;
    }
    //1、当方法使用了static修饰后,该方法就是静态方法
    //2、静态方法就可以访问静态属性/变量
    public static void payFree(double fee){
        Student.fee += fee;
    }
    public static void showFee(){
        System.out.println("总学费有:" + Student.fee);
    }
}


//2、创建main方法调用student类
public class hello {
    public static void main(String[] args) {
        //1、创建两个学生对象,来累计学费
        Student tom = new Student("tom");
        //2、打印出一个学生缴费后的累计情况
        tom.payFree(100);
        tom.showFee();

        Student mary = new Student("mary");
        //3、打印出二个学生缴费后的累计情况
        mary.payFree(200);
        mary.showFee();
    }
}
}
  • 运行结果

在这里插入图片描述

2.2、类方法的使用场景
  • ①当方法中不涉及到任何和对象相关的成员,则可以将方法设计称静态方法,提高开发效率;
  • ②在程序实际开发中,往往会将一些通用的方法,设计成静态方法,这样我们不需要创建对象就可以调用方法;
举报

相关推荐

0 条评论