我是靠谱客的博主 留胡子凉面,最近开发中收集的这篇文章主要介绍非零基础自学Java (老师:韩顺平) 第10章 面向对象编程(高级部分) 10.1 类变量和类方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

非零基础自学Java (老师:韩顺平)

✈【【零基础 快速学Java】韩顺平 零基础30天学会Java】

第10章 面向对象编程(高级部分)

文章目录

      • 非零基础自学Java (老师:韩顺平)
      • 第10章 面向对象编程(高级部分)
        • 10.1 类变量和类方法
          • 10.1.1 类变量 - 提出问题
          • 10.1.2 传统解决方法
          • 10.1.3 类变量快速入门
          • 10.1.4 类变量内存布局
          • 10.1.5 什么是类变量
          • 10.1.6 如何定义类变量
          • 10.1.7 如何访问类变量
          • 10.1.8 类变量使用注意事项和细节讨论
          • 10.1.9 类方法基本介绍
          • 10.1.10 类方法的调用
          • 10.1.11 类方法举个栗子
          • 10.1.12 类方法经典的使用场景
          • 10.1.13 类方法使用注意事项和细节讨论

10.1 类变量和类方法

10.1.1 类变量 - 提出问题

有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有多少人在玩?,编写程序解决。

在这里插入图片描述

10.1.2 传统解决方法
  • 在main方法中定义一个变量 count
  • 当有一个小孩加入游戏就 count ++ , 最后count就记录着有多少个人在玩

问题:

  • count 独立于对象,尴尬
  • 访问count,没有使用到面向对象
10.1.3 类变量快速入门

举个栗子

package com.dingjiaxiong.static_;

/**
 * ClassName: ChildGame
 * date: 2022/9/3 15:14
 *
 * @author DingJiaxiong
 */

public class ChildGame {
    public static void main(String[] args) {
        Child child1 = new Child("孙悟空");
        child1.join();
        child1.count ++;

        Child child2 = new Child("猪八戒");
        child2.join();
        child2.count ++;

        Child child3 = new Child("唐僧");
        child3.join();
        child3.count ++;

        Child child4 = new Child("沙悟净");
        child4.join();
        child4.count ++;

        System.out.println("共有" + Child.count + "个小孩加入了游戏");

        System.out.println(child1.count);
        System.out.println(child2.count);
        System.out.println(child3.count);
        System.out.println(child4.count);

    }
}

class Child{
    private String name;

    public static int count = 0;

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

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

运行结果

在这里插入图片描述

10.1.4 类变量内存布局

【static变量是对象共享】

共识

  • static变量是一个类所有对象共享
  • static类变量,在类加载的时候就生成了

在这里插入图片描述

10.1.5 什么是类变量

类变量也叫静态变量/静态属性,是该类的所有对象共享的变量。

任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。这个从前面的图也可看出来。

10.1.6 如何定义类变量

定义语法

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

static 访问修饰符 数据类型 变量名;
10.1.7 如何访问类变量
  • 类名.类变量名【推荐】
  • 对象名.类变量名

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

举个栗子

package com.dingjiaxiong.static_;

/**
 * ClassName: VisitStatic
 * date: 2022/9/3 16:01
 *
 * @author DingJiaxiong
 */

public class VisitStatic {
    public static void main(String[] args) {
        System.out.println(A.name);
        A a = new A();
        System.out.println(a.name);
    }
}

class A{
    public static String name = "韩老师666";
    private int num = 10;

}

运行结果

在这里插入图片描述

10.1.8 类变量使用注意事项和细节讨论
  • 什么时候需要用类变量

    当需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量):比如:定义学生类,统计所有学生共交多少钱。

  • 类变量与实例变量(普通属性)区别

    类变量是该类的所有对象共享的,而实例变量是每个对象独享的。

  • 加上static称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量

  • 类变量可以通过类名.类变量名或者对象名.类变量名来访问,但java设计者推荐使用类名.类变量名方式访问。【前提是满足访问修饰符的访问权限和范围】

  • 实例变量不能通过类名.类变量名方式访问。

  • 类变量是在类加载时就初始化了,也就是说,即使你没有创建对象,只要类加载了,就可以使用类变量了。

  • 类变量的生命周期是随类的加载开始,随着类消亡而销毁。

举个栗子

package com.dingjiaxiong.static_;

/**
 * ClassName: StaticDetail
 * date: 2022/9/3 16:07
 *
 * @author DingJiaxiong
 */

public class StaticDetail {
    public static void main(String[] args) {
        B b = new B();
        System.out.println(B.n2);

        System.out.println(C.address);
    }
}

class B{
    public int n1 = 100;
    public static int n2 = 200;
}

class C{
    public static String address = "北京";
}

运行结果

在这里插入图片描述

10.1.9 类方法基本介绍

类方法也叫静态方法。

形式:

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

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

使用方式【前提是满足访问修饰符的访问权限…】

  • 类名.方法名
  • 对象名.类方法名
10.1.11 类方法举个栗子
package com.dingjiaxiong.static_;

/**
 * ClassName: StaticMethod
 * date: 2022/9/3 16:16
 *
 * @author DingJiaxiong
 */

public class StaticMethod {
    public static void main(String[] args) {
        Stu tom = new Stu("Tom");
        Stu.payFee(100);

        Stu marry = new Stu("Marry");
        Stu.payFee(200);

        Stu.showFee();

        System.out.println("9开平方的结果是 = " + Math.sqrt(9));

        System.out.println(MyTools.calSum(10 ,30));
    }
}

class MyTools{
    //求两个数的和
    public static double calSum(double n1 , double n2){
        return n1 + n2;
    }
}

class Stu{
    private String name;
    private static double fee = 0;

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

    public static void payFee(double fee){
        Stu.fee += fee;
    }

    public static void showFee(){
        System.out.println("总学费有 :" + Stu.fee);
    }
}

运行结果

在这里插入图片描述

10.1.12 类方法经典的使用场景

当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。

在程序员实际开发,往往会将一些通用的方法,设计成静态方法,这样不需要创建对象就可以使用了,比如打印一维数组,冒泡排序,完成某个计算任务等。

10.1.13 类方法使用注意事项和细节讨论
  • 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区∶
    • 类方法中无this的参数
    • 普通方法中隐含着this的参数
  • 类方法可以通过类名调用,也可以通过对象名调用。
  • 普通方法和对象有关,需要通过对象名调用,比如对象名.方法名(参数),不能通过类名调用。
  • 类方法中不允许使用和对象有关的关键字,比如this和super。普通方法(成员方法)可以。
  • 类方法(静态方法)中只能访问静态变量或静态方法。
  • 普通成员方法,既可以访问非静态成员,也可以访问静态成员。

【静态方法,只能访问静态的成员,非静态的方法,可以访问静态成员和非静态成员(必须遵守访问权限)】

最后

以上就是留胡子凉面为你收集整理的非零基础自学Java (老师:韩顺平) 第10章 面向对象编程(高级部分) 10.1 类变量和类方法的全部内容,希望文章能够帮你解决非零基础自学Java (老师:韩顺平) 第10章 面向对象编程(高级部分) 10.1 类变量和类方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部