一个毫不起眼,却至关重要的关键字static

概述

  • 概念:static(静态的意思),可以修饰 成员变量成员方法
  • 特点:
    1. 被 static 修饰的 成员变量和成员方法 被类的所有对象共享(仅代表一个类创建出来的所有对象)
    2. 静态的成员方法,只能去访问静态的成员
    3. 被 static 修饰的 成员变量,叫作 类变量,修饰的 成员方法,叫做 类方法。故名思意:类变量和类方法,可以通过 类名.变量 类名.方法() 来调用。同时呢,还是可通过 对象.变量 对象.方法() 调用的。

买票系统

  • 接下来,我们通过一个有趣的代码,来加深我们对 static 的认识
  • 我们要知道,我们平日出行时候,会购买 火车票 、飞机票等,我们知道啊,同学甲和同学乙同时看一趟火车票,甲看到还有 200张,购买了一张,乙再去看的时候应该还有多少张呢?(或许有些人,看到这里觉得这也太简单了叭,不要着急哦,我们往下看)

  • 首先,我们去编写 售票系统的代码

    // 售票火车票系统
    public class Train{
        
        // 定义 票数 200 张 
        private int ticket = 200;
        
        // get 方法:获得ticket的值
        public int getTicket(){
            return ticket;
        }
        
        // set 方法:设置ticket的值
        public void setTicket(int ticket){
            this.ticket  = ticket;
        }
        
        // 购票方法:每次购买 ticket 张
        public void payTicket(int ticket){
            // this:本类对象
            this.ticket -= ticket; 
        }
    }
    
  • 接下来,我们编写测试代码

    // 测试类
    public class Test {
        public static void main(String[] args) {
    
    
            // 创建对象:t1
            Train t1 = new Train();
            System.out.println("t1购买前票数为:" + t1.getTicket() + "张");
            // t1 买了 三张票
            t1.payTicket(3);
            // 打印当前票数
            System.out.println("t1购买后票数为:" + t1.getTicket() + "张");
    
            // 创建对象:t2
            Train t2 = new Train();
            System.out.println("t2购买前票数为:" + t2.getTicket() + "张");
            // t2 买了 四张票
            t2.payTicket(4);
            // 打印当前票数
            System.out.println("t2购买后票数为:" + t2.getTicket() + "张");
    
        }
    }
    

    我们推测下,最终应打印的结果是:

    ​ t1购买前票数为:200 张

    ​ t1购买后票数为:197张

    ​ t2购买前票数为:197张

    ​ t2购买后票数为:193张

  • 接下来,我们看运行结果

    一个毫不起眼,却至关重要的关键字static_第1张图片

  • 很明显可以看到,我们运行结果,和推测的结果不一致,有心的同学已经想到了,那接下来,我们用 static 修饰这个票数,运行之后看下

    一个毫不起眼,却至关重要的关键字static_第2张图片

  • 我们发现这次,结果正确了,这是为什么呢?

    • 因为我们在 static 特点中有句话,叫做:被 static 修饰的 成员变量和成员方法 被类的所有对象共享,正因如此,我们才能实现上述功能。
    • 不被 static 修饰的时候,每个变量的值,是固定的,t1 看到的是 200,t1 修改后,t1 所看到的变成了 197,但是 t2 看到的仍是 200。

你可能感兴趣的:(Java,基础知识专栏,开发语言,java)