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

关于方法的定义上面有无static的对比

关于方法的定义上面有无static的对比

在 Java 中,static 关键字用于定义类的静态成员,包括静态方法和静态变量。使用 static 和不使用 static 的区别主要体现在以下几个方面:

1. 访问方式

静态方法:

静态方法属于类本身,而不是类的实例。你可以直接通过类名调用静态方法,而不需要创建类的实例。

示例:

public class MyClass {public static void staticMethod() {System.out.println("这是一个静态方法");}public static void main(String[] args) {MyClass.staticMethod(); // 直接通过类名调用}
}

非静态方法:

非静态方法属于类的实例,必须通过创建对象的方式来调用。

public class MyClass {public void nonStaticMethod() {System.out.println("这是一个非静态方法");}public static void main(String[] args) {MyClass obj = new MyClass(); // 创建类的实例obj.nonStaticMethod(); // 通过实例调用}
}

2. 访问成员变量

静态方法:

静态方法只能直接访问静态变量和静态方法。它不能直接访问非静态成员(变量和方法),因为非静态成员需要通过实例来访问。

public class MyClass {static int staticVar = 10;int nonStaticVar = 20;public static void staticMethod() {System.out.println(staticVar); // 可以访问静态变量// System.out.println(nonStaticVar); // 不能访问非静态变量,编译错误}
}

非静态方法:

非静态方法可以访问静态和非静态成员变量和方法。

public class MyClass {static int staticVar = 10;int nonStaticVar = 20;public void nonStaticMethod() {System.out.println(staticVar); // 可以访问静态变量System.out.println(nonStaticVar); // 可以访问非静态变量}
}

3. 作用域和生命周期

静态方法:

静态方法在类加载时就被分配了内存,属于类的共享部分。

适合用于不依赖于实例状态的功能,比如工具类方法。

非静态方法:

非静态方法在实例化对象时分配内存,每个对象都有自己独立的非静态变量状态。
适合用于需要访问对象状态或实例变量的功能。

结合代码示例:

在代码中,min 方法可以定义为静态或非静态,取决于你是否需要访问类的实例变量。

非静态方法示例:

如果你希望 min 方法能够访问实例变量 min,可以这样定义:

public class Method {int min = 100000;public int min(int... arg) {for (int i = 0; i < arg.length; i++) {if (arg[i] < min) {min = arg[i];}}return min;}public static void main(String[] args) {Method methodInstance = new Method(); // 创建实例int minimumValue = methodInstance.min(34, 67, 23, 5, 90, 1, 300);System.out.println("最小值是:" + minimumValue);}
}

静态方法示例:

如果你希望 min 方法不依赖于实例变量,你可以将 min 方法声明为静态,并将 min 变量改为静态:

public class Method {static int min = 100000;public static int min(int... arg) {for (int i = 0; i < arg.length; i++) {if (arg[i] < min) {min = arg[i];}}return min;}public static void main(String[] args) {int minimumValue = Method.min(34, 67, 23, 5, 90, 1, 300); // 直接通过类名调用System.out.println("最小值是:" + minimumValue);}
}

总结

选择使用 static 或不使用 static 主要取决于你的方法是否需要访问实例状态。如果你需要访问类的实例变量,则使用非静态方法;如果不需要,且希望通过类名直接调用,则可以使用静态方法。


http://www.mrgr.cn/news/63550.html

相关文章:

  • android浏览器源码 可输入地址或关键词搜索 android studio 2024 可开发可改地址
  • 线上3D看车有何优势?
  • TikTok直播专线:提升直播效果和体验
  • Pytest-Bdd-Playwright 系列教程(6):在测试步骤函数中设置别名数据共享
  • PHP如何对输出进行转义
  • 选项卡设计与实现
  • 算法笔记()
  • Android面试八股文
  • 用Python脚本执行安卓打包任务
  • 若依-侧边栏开关按钮禁用,侧边栏始终保持展开
  • 苹果地表最强AI PC诞生,M4 Max猛兽加持性能暴涨!顶配6万,续航飙至24小时
  • Chromium127编译指南 Linux篇 - 同步第三方库以及Hooks(六)
  • 大数据之文件服务器方案
  • jsp中关于一些常识的区别
  • 【AIGC】逆向拆解OpenAI官方提示词Prompt技巧:高效提升ChatGPT输出质量
  • 【私聊记录】最近在忙什么啊?听说你在学人工智能?
  • 工业数字化| 2024年最新物联网平台案例一览
  • 骨传导耳机哪个牌子值得入手?这五款优质机型闭眼入也不踩雷
  • 企业培训知识库 | 产品知识培训的终极指南(定义、好处、方法)
  • 包子凑数(完全背包)
  • 2024 Rust现代实用教程 Borrowing借用 Lifetime生命周期
  • 【C++】关联式容器
  • [ 问题解决篇 ] win11中本地组策略编辑器gpedit.msc打不开(gpedit.msc缺失)
  • ElementUI中el-table双击单元格显示输入框
  • 提升安全上网体验:Windows 11 启用 DOH(阿里公共DNS)
  • 多SpringBoot项目同进程下统一启动