只要是有学过Java的都一定知道static,也一定能多多少少说出一些作用和注意事项。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 Java中的`static`关键字在编程中扮演着至关重要的角色,它是Java面向对象特性的一个关键组成部分。`static`关键字用于修饰变量、方法以及嵌套类,它使得这些元素可以在不创建对象的情况下被访问。 我们来看一下`static`修饰的静态变量。静态变量,也被称为类变量,它们在内存中只有一个副本,所有该类的对象共享这同一个副本。这意味着,无论创建多少个类的实例,静态变量的值都是相同的。例如: ```java public class StaticDemo { private static int i = 50; private int j = 60; public static void main(String[] args) { StaticDemo staticDemo = new StaticDemo(); StaticDemo staticDemo1 = new StaticDemo(); // 输出50,因为i是静态变量,所有实例共享同一值 System.out.println(staticDemo.i); System.out.println(staticDemo1.i); // 改变i的值 staticDemo.i = 52; // 输出52,因为静态变量的改变会影响到所有实例 System.out.println(staticDemo1.i); // 实例变量j是独立的,每个实例有自己的副本 staticDemo.j = 65; staticDemo1.j = 70; // 输出各自实例的j值 System.out.println(staticDemo.j); System.out.println(staticDemo1.j); } } ``` 接下来,我们讨论`static`修饰的静态方法。静态方法与类相关联,而不是与类的实例相关联。这意味着,我们可以通过类名直接调用静态方法,无需创建对象。但是,由于静态方法不依赖于任何实例,所以它们不能访问非静态成员,因为非静态成员是在创建对象时分配的。`main`方法就是一个静态方法的例子,它作为程序的入口点,程序开始运行时会先加载类,此时还没有创建任何对象,因此`main`方法必须是静态的。 ```java public class StaticTest { private static int i; private int j; public StaticTest(int i, int j) { this.i = i; this.j = j; say1(); // 调用静态方法 } public void say1() { // 非静态方法,可以访问静态和非静态成员 System.out.println("you age is " + i); System.out.println("you age is " + j); } public static void main(String[] args) { StaticTest staticTest = new StaticTest(4, 5); StaticTest staticTest1 = new StaticTest(10, 69); // 输出各自实例的静态变量i System.out.println(staticTest.i); System.out.println(staticTest1.i); } } ``` 关于构造函数是否是静态方法,《Java编程思想》中的说法可能是指,虽然构造函数不直接使用`static`关键字,但它们在逻辑上类似于静态方法,因为它们在创建对象时被调用,且不依赖于实例状态。然而,构造函数并非真正意义上的静态方法,因为它们可以访问非静态成员并初始化实例变量。 `static`关键字在Java中用于定义类级别的变量和方法,允许我们在不创建对象的情况下进行操作。理解`static`的作用对于编写高效、清晰的Java代码至关重要。它帮助我们管理内存,特别是在处理大量对象时,通过共享静态变量可以减少内存消耗。同时,合理使用静态方法可以使代码结构更加清晰,提高代码的可读性和可维护性。
- 粉丝: 3
- 资源: 943
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip
- (源码)基于PythonDjango框架的资产管理系统.zip
- (源码)基于计算机系统原理与Arduino技术的学习平台.zip
- (源码)基于SSM框架的大学消息通知系统服务端.zip
- (源码)基于Java Servlet的学生信息管理系统.zip
- (源码)基于Qt和AVR的FestosMechatronics系统终端.zip