WHCSRL 技术网

Java学习笔记——类变量和类方法

类变量

引入

要统计共有多少小孩加入了游戏,已有解法如下:

package staticDemo;

public class Child {

    private String name;

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

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

    public static void main(String[] args) {
        
        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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

存在的问题:
在main()中设置了一个count变量来统计child数量,但是在Child类中却没有定义。
解决方法:
将count设置为static在这里插入图片描述
p1和p2有共享空间

修改后的程序如下

package staticDemo;

public class Child {

    private String name;
    private static int count = 0;

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

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

    public static void main(String[] args) {

        int count = 0;
        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(Child.count + "人参加了游戏...");
        System.out.println(child1.count);
        System.out.println(child2.count);
        System.out.println(child3.count);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

结果

阿明加入了游戏…
阿东加入了游戏…
阿瓜加入了游戏…
3人参加了游戏…
3
3
3

何时需要类变量

当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量)

类变量和实例变量的区别

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

static内存

  • 共享的空间是一个堆空间 ,被对象共享
  • static类变量,在类加载的时候就生成了,所以即使没有创建对象实例也可以访问

如何访问类变量

  • 对象名.类变量名
  • 类名. 类变量名
  • 类变量的访问,必须遵守相关的访问权限

类方法

如何调用类方法

  • 对象名.类方法
  • 类名.类方法
  • 类方法的访问,必须遵守相关的访问权限

什么时候调用类方法

当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率
比如:utils类,Math类,Arrays类,Collections类

注意事项

  • 类方法中不能使用this,super
  • 类方法中只能访问静态变量或静态方法
    在这里插入图片描述
  • 普通方法,可以访问静态成员和非静态成员

main()方法

public static void main(String[] args)

  • main方法是虚拟机调用的
  • Java虚拟机在执行main()方法,所以该方法的访问权限必须是public
  • Java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static
  • String[] args,该方法接收的是String类型的数组参数,该数组中保存执行java命令时传递给所运行的类的参数
    在这里插入图片描述
    idea中设置运行的类的参数
    在这里插入图片描述
    在这里插入图片描述
推荐阅读