面向对象编程(高级)

面向对象编程(高级)

类变量和类方法

  • 类变量
  • 传统方法解决
    • 问题分析
      • count 是一个独立于对象
      • 没有使用oop
  • 类变量快速入门
package com.hspedu.static_;

public class ChildGame {
    public static void main(String[] args) {


        /*
        思路
            定义一个变量 count  统计有多少孩子加入游戏

         */
        Child child1 = new Child("白骨精");
        child1.join();
        child1.count++;

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

        Child child3 = new Child("老鼠精");
        child3.join();
        child3.count++;
        System.out.println("共有" + child1.count + "小孩加入游戏了.....");
    }
}

class  Child {
    private  String name;
    //定义一个变量 count ,是一个类变量(静态变量)static
    //
    public  static int count = 0;

    public Child(String name) {
        this.name = name;
    }

    public  void join(){
        System.out.println(name +"加入了游戏");
    }
}
  • 类变量的内存分析

在这里插入图片描述

​ static 变量 是同一个类所有对象共享的

​ static类变量 在类加载的时候就生成了

​ static 变量 保存在 class 实例的尾部(反射机制) 在堆中

  • 什么是类变量

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

  • 如何定义类变量

    定义语法:

    public class VisitStatic {
         
        public static void main(String[] args) {
         
    
            //类名.类变量名 访问
            //说明 类变量随着类加载而创建的,所有即使没有创建对象实例也能访问
            System.out.println(A.name);
    
            A a = new A();
            //通过对象名.类变量名 访问
            System.out.println("a.name="+a.name);
        }
    }
    class A {
         
        //类变量
        //强调 : 类变量的访问 必须遵守 相关的访问权限
        public static  String name = "韩顺平教育~~";
    }
    
类变量使用注意事项和细节
  • 什么时候需要用类变量
    • 当我们
  • 类变量与实例变量(属性)的区别
    • 类变量
  • 加上static成为类变量或静态变量,否则称为实例变量/普通变量/成员变量
  • 类变量可以通过 类名.类变量名 或者 对象名.类变量名 但还需要遵守相关的访问权限
  • 实例变量不能通过类名.变量名访问
  • 类变量在类加载的时候就创建了,
  • 类变量的生命周期是随类的加载开始,随着类的销毁而销毁
类方法
  • 类方法基本介绍

类方法也叫静态方法

形式如下:

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

  • 类方法的调用

    使用方式 : 类名.类方法名 或 对象名.类方法名 (前提是 满足修饰符的访问权限)

  • 案例说明 StaticMethod.java

package com.hspedu.static_;

public class StaticMethod {
   

    public static void main(String[] args) {
   

        //创建两个学生对象 交学费
        Stu tom = new Stu("tom");
        tom.payFee(100);


        Stu jack = new Stu("jack");
        jack.payFee(200);

        //输出当前收到的总学费
        Stu.showFee();

    }
}

class Stu {
   
    private String name; //普通成员

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


    public Stu(String name) {
   
        this.name = name;
    }
    /*
    说明

    当方法 使用了static 修饰后 就是一个静态方法
    静态方法就可以访问静态属性/变量
     */
    public static  void payFee(double fee){
   
        Stu.fee += fee;//累积都静态变量的fee

    }
    public static   void  showFee(){
   
        System.out.println("总学费:" + Stu.fee);
    }
}
  • 类方法的使用场景

当我们的方法中不涉及任何和对象相关的成员,则可以将方法设计为静态成员方法,提高开发工具

比如 工具类的方法 utils Math类 Arrays类

  • 小结

    程序员开发中,可以使用静态方法来写自己的工具类 提高开发效率

  • 类方法的使用注意事项和细节讨论

    • 类方法和普通方法都是随着类的加载而加载,随着类的销毁而销毁
    • 类方法中不允许使用对象有关的关键字,比如this和super 普通方法(成员方法)可以
    • 类方法(静态方法)中只能访问静态变量 或静态方法
    • 普通方法 既可以方法静态变量(方法), 也可以访问 成员变量(方法)

    小结:静态方法,只能访问静态成员,非静态方法,既能访问普通成员,也能访问静态成员

package com.hspedu.static_;

public class StaticMethodDetail {
   

    public static void main(String[] args) {
   

        D.hi();
        //非静态方法 不能通过类名调用
        //D.say();  //错误 需要创建对象 才能访问
    }
}

class D {
   
    private  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值