面向对象编程(高级)
类变量和类方法
- 类变量
- 传统方法解决
- 问题分析
- 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