2023-10-08-Java——对象编程高级篇【课程笔记】
本文最后更新于 2024-10-13,文章内容可能已经过时。
{mtitle title=“类变量和类方法”/}
{bilibili bvid=“BV1fh411y7R8” page=“374”/}
{dotted startColor=“#ff6c6c” endColor=“#1989fa”/}
1. 提出问题:
运用Java解决问题:
package com.ljj.static_;
public class ChildGame {
public static void main(String[] args) {
int count = 0;
Child child01 = new Child("小明同学");
child01.join();
count++;
Child child02 = new Child("小红同学");
child02.join();
count++;
Child child03 = new Child("小黄同学");
child03.join();
count++;
System.out.println("一共有"+count+"同学");
}
}
class Child{ //类
private String name;
public Child(String name){
this.name = name;
}
public void join(){
System.out.println(name+"加入了游戏.......");
}
}
使用类变量改进:
package com.ljj.static_;
public class ChildGame {
public static void main(String[] args) {
int count = 0;
Child child01 = new Child("小明同学");
child01.join();
child01.count++;
Child child02 = new Child("小红同学");
child02.join();
child02.count++;
Child child03 = new Child("小黄同学");
child03.join();
child03.count++;
System.out.println("一共有"+Child.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+"加入了游戏.......");
}
}
2. 类变量内存布局:
文章参考:
a. 静态变量被对象共享
b. 因此不影响对静态对象的使用
不管在static变量在哪里:
-
static变量是同一个类所有对象共享的
-
static类变量,在类加载的时候就生成了
3. 定义类变量
定义语法:
访问修饰符 static 数据类型 变量名;【推荐】
static 访问修饰符 数据类型 变量名;
如何访问:
类名.类变量名【推荐使用】
对象名.类变量名【静态变量的访问修饰符的访问权限和范围和普通属性一样】
//代码示例:
package com.ljj.static_;
public class VisitStatic {
public static void main(String[] args) {
System.out.println(A.name);//示例1
A a = new A();
System.out.println(a.name);//示例2
}
}
class A{
//类变量
public static String name="小明";
}
-
实例变量不能通过 类名.类变量名 方式访问
-
即使没有创建对象,类加载了也能访问
4、类方法
-
基本介绍
静态方法: 访问形式如下
访问修饰符 static 数据返回类型 方法名(){}【推荐】
static 访问修饰符 数据返回类型 方法名(){}
-
调用方式:
类.类方法名 OR 对象.类方法名【访问条件同上】
//代码示例: package com.ljj.static_; public class StaticMethod { public static void main(String[] args) { Stu tom = new Stu("tom"); tom.payFee(1000); Stu marry = new Stu("marry"); marry.payFee(10086); Stu.showFee(); } } class Stu{ private String stuName; //累计学费 private static double fee = 0; public Stu(String stuName) { this.stuName = stuName; } //说明: //1. 当方法使用了static修饰后,该方法就是静态方法 //2. 静态方法就可以访问静态属性/ 变量 public static void payFee(double fee){ Stu.fee += fee; } public static void showFee(){ System.out.println("总学费有:"+Stu.fee); } }
-
开发自己的工具类时,可以将方法做成静态方法,方便调用
类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区;
类方法中没有this的参数,普通方法中隐含着this的参数
类方法可以通过类名调用。也可以通过对象名调用
普通方法和对象有关,需要通过对象名调用,不能通过类名调用
类方法中不允许使用和对象有关的关键字,比如this和supe。普通方法(成员方法)可以。
类方法(静态方法)中只能访问静态变量或静态方法。
**口诀:**静态方法只能访问静态成员。
理解: 静态方法可以通过形参传入对象的方式,间接访问到非静态的成员
普通成员方法,既可以访问非静态成员,也可以访问静态变量(方法)。
小结:静态方法,只能访问静态的成员,非静态的方法,可以访问静态成员和非静态成员(但是必须要遵守访问权限)