【Java基础】类方法和类变量
第二阶段
类变量和类方法
【对象实例共享】同一个类所有对象共享
静态变量是被对象共享的,因此不影响对静态变量的使用
【静态变量保存在哪里】说法不一,看版本
静态变量是放在堆里面的(jdk8之后)(jdk8之前的话是在方法区里面)有待补充
【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 + "加入了游戏");
}
}
但是在这个里面count是独立于对象的,所以这里引出了类变量(静态变量)
下面是改进
public class ChildGame {
public static void main(String[] args) {
//int count = 0;
Child child01 = new Child("白骨精");
child01.join();
//count++;
child01.count++;
Child child02 = new Child("狐狸精");
child02.join();
// count++;
child02.count++;
Child child03 = new Child("老鼠精");
child03.join();
//count++;
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 + "加入了游戏");
}
}
上面改完之后就是这样了,主要是count成为了共享的变量,【对象实例共享】所以不管是Child.count``child01.count``child02.count``child03.count
都是3
什么是类变量
类变量也叫静态变量,是该类的所有对象共享的变量,任何一个该类的对象去访问它的时候,取到的都是相同的值,同样任何一个该类的对象去修改它的时候,修改的也是同一个变量
-------------补充一个内存实例图---------------------待补充
如何去定义静态变量
定义语法:
访问修饰符 static 数据类型 变量名;【推荐】
static 访问修饰符 数据类型 变量名;
如何访问:
类名.变量名 【推荐】
或者
对象名.类变量名【静态变量的访问修饰符的访问权限和范围是和普通属性是一样的】
类变量名是随着类的加载而创建的,所以即使没有创建对象实例也可以访问
package com.hspdeu.stc_;
public class VisitStatic {
public static void main(String[] args) {
//类名.类变量名
System.out.println(A.name);
A jshdjh = new A();
//对象名.类变量名
System.out.println(jshdjh.name);
}
}
class A {
public static String name = "hanshun";
}
类变量的使用细节
1/什么时候需要用类变量
当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量)
2/类变量与实例变量(普通属性)的区别
类变量是该类的所有对象共享的,而实例变量是每个对象独享的
3/加上static称为类变量或者静态变量,否则称为实例变量/普通变量/非静态变量
4/类变量可以通过////类名.类变量名【推荐】 来访问
5/实例变量不能通过 类名.类变量名 方式访问
6/类变量名是在类加载的时候就初始化了,也就是说,即使你没有创建对象,只要类加载了,就可以使用类变量了
7/类变量的生命周期是随着类的加载开始,随着类消亡而销毁
类方法
类方法基本介绍
也叫静态方法
访问修饰符 static 数据返回类型 方法名(){}
类方法的调用
使用方法:类名.类方法名 或者 对象名.类方法名
[无法从上下文中引用非静态方法]注意这一点
类方法的基本使用
package com.hspdeu.stc_;
public class StaticMethod {
public static void main(String[] args) {
Stu tom = new Stu("tom");
//System.out.println("tom 的学费是"+ Stu.payFee(1000););
tom.payFee(100);
Stu jack = new Stu("jack");
//System.out.println("jack的学费是" + Stu.payFee(2000););
jack.payFee(200);
//输出当前收到的总学费
Stu.showFee();
}
}
class Stu{
private String name;
//定义一个静态变量,累计学费
public static double fee = 0;
public Stu(String name) {
this.name = name;
}
//当方法使用了static修饰后,该方法就是一个静态方法
public static void payFee(double fee){
Stu.fee += fee;//累积
}
public static void showFee(){
System.out.println("总学费有" + Stu.fee);
}
}
类方法的使用细节
1/类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区
类方法中无this的参数
普通方法中隐含着this的参数
2/类方法可以通过类名调用,也可以通过对象名调用
3/普通方法和对象有关,需要通过对象名调用,不能通过类名调用
4/类方法中不允许使用和对象有关的关键词,比如this和super,普通方法可以
5/类方法中只能访问静态变量或者静态方法
6/普通成员方法既可以访问普通变量也可以访问静态变量
小结静态方法,只能访问静态的成员;非静态的方法可以访问静态和非静态成员。(必须遵守访问权限)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通