1、类变量
- 类变量与实例变量区别(重点)
变量类别 | 变量定义 | 变量调用 | 变量值改变 |
---|---|---|---|
类变量 | 类中被static修饰 | 类名.变量名/对象名.变量名 | 类变量是所有对象共有,其值只要被其中一个对象改变,其他对象的值就是被改变后的值 |
实例变量 | 类中不被static修饰 | 对象名.变量名 | 实例变量属于对象私有,某一个值被一个对象改变,该值就只在该对象中起作用。 |
1.1、类变量引入案例
-
范例:有一群小孩在玩堆雪人,不时的有新的小孩加入,请问如何知道现在共有多少人在玩?
-
思路:
- 1、在main方法中定义一个变量count;
- 2、当一个小孩加入游戏后count++,最后count就记录有多少小孩玩游戏;
-
代码
//1、创建类
public class Child {
private String name;
public Child(String name){
this.name = name;
}
public void join(){
System.out.println(name + "加入了游戏...");
}
}
//2、创建main方法
public class hello {
public static void main(String[] args) {
//定义一个变量count,统计有多少小孩加入了游戏
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、类变量入门使用
-
假设:设计一个int count表示总人数,我们再创建一个小孩时,就把count加1,并且count是所有对象共享就ok
-
问题分析:
- 1、count是一个独立于对象,很尴尬;
- 2、以后访问count很麻烦,没有使用到OPP;
- 3、因此,我们引出类变量/静态变量;
-
范例:定义一个静态变量count,是一个静态变量:最大特点会被Child所有实例对象共享;
//1、创建Child类
public class Child {
//定义一个变量count,是一个类型变量(静态变量)static静态
//该变量最大的特点会被Child类的所有对象实例共享
public static int count = 0;
private String name;
public Child(String name){
this.name = name;
}
public void join(){
System.out.println(name + "加入了游戏...");
}
}
//2、main方法调用
public class hello {
public static void main(String[] args) {
//定义一个变量count,统计有多少小孩加入了游戏
int count = 0;
Child child1 = new Child("白骨精");
child1.join();
//count++;
child1.count++;
Child child2 = new Child("狐狸精");
child2.join();
//count++;
child2.count++;
Child child3 = new Child("老鼠精");
child3.join();
//count++;
child3.count++;
System.out.println("child1的count值" + child1.count);
System.out.println("child1的count值" + child2.count);
System.out.println("child1的count值" + child3.count);
System.out.println("Child的count值" + Child.count);
}
}
- 运行结果
1.3、类变量详述
-
类变量:即静态变量/静态属性,是该类的所有对象共享的变量;
- ①任何一个该类的对象去访问它时,取到的都是相同的值;
- ②同样任何一个该的类的对象去修改它时,修改的也是同一个变量。
- ③类变量是随着类的加载的创建,所以即使没有创建对象实例也可以访问。
-
语法格式
访问修饰符 static 数据类型 变量名;
- 访问格式
类名.类变量名
- 范例
//1、创建child类
public class Child {
//定义一个变量count,是一个类型变量(静态变量)static静态
//该变量最大的特点会被Child类的所有对象实例共享
public static int count = 0;
private String name;
public Child(String name){
this.name = name;
}
public void join(){
System.out.println(name + "加入了游戏...");
}
}
//2、main方法调用
public class hello {
public static void main(String[] args) {
System.out.println("Child的count值" + Child.count);
}
}
- 运行结果
1.4、类变量的细节
-
使用场景: 我们需要然某个类的所有对象都共享一个变量,可以考虑类变量;
-
范例
//1、创建类
public class Child {
//定义一个变量count,是一个类型变量(静态变量)static静态
//该变量最大的特点会被Child类的所有对象实例共享
public static int count = 0;
//普通属性/普通成员变量/非静态属性/非静态成员变量
private String name;
public Child(String name){
this.name = name;
}
public void join(){
System.out.println(name + "加入了游戏...");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//2、分别调用类变量和实例变量
public class main {
public static void main(String[] args) {
//创建实例
Child child = new Child("张三");
//调用类变量
System.out.println("类Child的count值" + Child.count);
//调用实例变量
System.out.println("实例child的count值" + child.getName());
}
};
- 运行结果
2、类方法
- 定义格式
访问修饰符 static 数据返回类型 方法名(){ }
2.1、类方法与实例方法区别
方法名称 | 方法定义 | 方法调用 | 描述 |
---|---|---|---|
类方法 | 被static修饰的方法 | 类名.方法名/对象名.方法名 | 不能使用和对象有关的关键字(super、this) |
实例方法 | 没有被static修饰的方法 | 对象名.方法名 | 可以使用 |
- 范例
//1、创建类,定义类的静态变量和静态方法
class Student {
//定义一个普通成员
private String name;
//定义一个静态变量,来累计学生的学费
private static double fee = 0;
public Student(String name){
this.name = name;
}
//1、当方法使用了static修饰后,该方法就是静态方法
//2、静态方法就可以访问静态属性/变量
public static void payFree(double fee){
Student.fee += fee;
}
public static void showFee(){
System.out.println("总学费有:" + Student.fee);
}
}
//2、创建main方法调用student类
public class hello {
public static void main(String[] args) {
//1、创建两个学生对象,来累计学费
Student tom = new Student("tom");
//2、打印出一个学生缴费后的累计情况
tom.payFree(100);
tom.showFee();
Student mary = new Student("mary");
//3、打印出二个学生缴费后的累计情况
mary.payFree(200);
mary.showFee();
}
}
}
- 运行结果
2.2、类方法的使用场景
- ①当方法中不涉及到任何和对象相关的成员,则可以将方法设计称静态方法,提高开发效率;
- ②在程序实际开发中,往往会将一些通用的方法,设计成静态方法,这样我们不需要创建对象就可以调用方法;