当前位置: 首页 > java >正文

JAVA--- 关键字static

之前我们学习了JAVA 面向对象的一些基本知识,今天来进阶一下!!!

static关键字

static表示静态,是JAVA中的一个修饰符,可以修饰成员方法,成员变量,可用于修饰类的成员(变量、方法、代码块)和嵌套类。

静态变量

静态变量属于类,并非类的某个实例。

无论创建多少个类的对象,静态变量只有一份存储在内存中。

静态变量可通过类名直接访问,也能通过对象实例访问。

class Student {static int totalStudents; // 静态变量,记录学生总数//被所有 Student 对象共享。每创建一个 Student 对象,totalStudents 的值就会加 1。String name;public Student(String name) {this.name = name;totalStudents++; // 每创建一个学生对象,总数加 1}
}public class StaticVariableExample {public static void main(String[] args) {Student s1 = new Student("Alice");  //new关键字,堆内存Student s2 = new Student("Bob");System.out.println("Total students: " + Student.totalStudents); // 通过类名访问静态变量System.out.println("Total students (via s1): " + s1.totalStudents); // 通过对象实例访问静态变量}
}

静态方法

静态方法属于类,而非类的某个实例;

可以通过类名直接调用静态方法,无需创建类的对象;

静态方法只能访问静态成员(静态变量和静态方法),不能访问实例成员(实例变量和实例方法),因为静态方法在类加载时就已存在,此时可能还没有创建对象。

class MathUtils {static int add(int a, int b) { // 静态方法return a + b;}
}public class StaticMethodExample {public static void main(String[] args) {int result = MathUtils.add(3, 5); // 通过类名调用静态方法System.out.println("3 + 5 = " + result);}
}

拓展:工具类

工具类是帮我们做一些事情的,但是不描述任何事物的类!

JavaBean类

用来描述一类事物的类

e.g. Student,Teacher,Dog,Cat 等

测试类用来检查其他类是否书写正确,带有main方法的类,使程序的入口
工具类帮我们做一些事情的,但是不描述任何事物的类
 工具类书写规则:

1.类名见名知意

2.私有化构造方法                      

public class ArrUtil{private ArrUtil(){}
}

3.方法定义为静态     

   

静态代码块

静态代码块在类加载时执行,且仅执行一次。它通常用于对静态变量进行初始化操作。

class MyClass {static int value;static {// 静态代码块value = 10;   //对value静态变量进行初始化System.out.println("Static block executed.");}
}public class StaticBlockExample {public static void main(String[] args) {System.out.println("Value: " + MyClass.value);}
}

静态嵌套类

静态嵌套类是定义在另一个类内部的静态类。它可以直接访问外部类的静态成员,但不能直接访问外部类的实例成员。

class OuterClass {static int outerStaticVar = 10;int outerInstanceVar = 20;static class StaticNestedClass {void display() {System.out.println("Outer static variable: " + outerStaticVar);// 不能访问 outerInstanceVar,因为它是实例变量// System.out.println("Outer instance variable: " + outerInstanceVar); }}
}public class StaticNestedClassExample {public static void main(String[] args) {OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();nested.display();}
}

StaticNestedClass 是静态嵌套类,可直接访问外部类的静态变量 outerStaticVar

static的注意事项

1.静态方法只能访问静态变量和静态方法;

2.非静态方法可以访问静态变量或者静态方法,也可以访问非静态成员的成员变量和非静态的成员方法;

3.静态方法中是没有this关键字的。

        

重新认识main方法

public class HelloWorld{public static void main(String[] args){System.out.println("HelloWorld");}
}
public被JVM调用,访问权限足够大
static

被JVM调用,不用创建对象,直接类名访问

因为main方法是静态的,所以测试类中的其他方法也需要是静态的

void被JVM调用,不需要给JVM返回值
main一个通用的名称,虽然不是关键字,但是被JVM识别

 

http://www.xdnf.cn/news/2868.html

相关文章:

  • 长效住宅IP是什么?如何获取长效住宅IP?
  • 工程管理部绩效考核关键指标与项目评估
  • 选择排序快速排序
  • 国标GB28181视频平台EasyCVR实用方案:如何实现画面拉伸
  • 大厂Java面试深度解析:Dubbo服务治理、WebSocket实时通信、RESTEasy自定义注解与C3P0连接池配置实践
  • 信创开发中的数据库详解:国产替代背景下的技术生态与实践指南
  • 百度「心响」:通用超级智能体,重新定义AI任务执行新范式
  • Linux CentOS 7 安装Apache 部署html页面
  • 前端 AI 开发实战:基于自定义工具类的大语言模型与语音识别调用指南
  • 2025.4.29_STM32_看门狗WDG
  • 通过全局交叉注意力机制和距离感知训练从多模态数据中识别桥本氏甲状腺炎|文献速递-深度学习医疗AI最新文献
  • 前端防护利器:disable-devtool 使用指南 - 保护你的Web应用安全
  • JAVA---集合ArrayList
  • 《从线性到二维:CSS Grid与Flex的布局范式革命与差异解析》
  • Spring中bean的生命周期(笔记)
  • LeetCode热题100--53.最大子数组和--中等
  • 最新的30个Android Kotlin面试题
  • Kafka的Rebalance机制可能引发什么问题?如何优化?怎么减少不必要的Rebalance
  • 第十六届蓝桥杯 2025 C/C++组 密密摆放
  • Vue 中的过渡效果与响应式数据:transition、transitiongroup、reactive 和 ref 详解
  • FastGPT部署的一些问题整理
  • 对 FormCalc 语言支持较好的 PDF 编辑软件综述
  • 短视频矩阵批量剪辑与场景剪辑功能 OEM 定制开发
  • C++——调用OpenCV和NVIDIA Video Codec SDK库实现使用GPU硬解码MP4视频文件
  • 【深度学习与大模型基础】第14章-分类任务与经典分类算法
  • 从 BERT 到 GPT:Encoder 的 “全局视野” 如何喂饱 Decoder 的 “逐词纠结”
  • 高定电视,一场关于生活方式的觉醒
  • 在spark里通过jps命令,看到的进程
  • 【C++11】包装器:function与bind
  • iVX 引领软件开发进入 “可视化逻辑时代”