JAVA:正确访问静态方法

2023-11-24

我是JAVA新手,我喜欢尝试并理解一切。

在JAVA中访问静态方法“hero.returnHp()”时,我有以下内容:

 hero Mike = new hero();

 Mike.returnHp();

程序运行良好,但我注意到 Eclipse 有一条警告,指出“英雄类型的静态方法应该以静态方式访问”。当我接受自动修复时,它会更改“Mike.returnHp();”到“hero.returnHp();”。

所以我有两个问题:

1)这样做有什么好处?

2)如果我创建了两个相同类型的对象,如何指定以静态方式访问时返回哪一个?

Thanks!


我首先想指出关键字 static 的含义。

静态变量每个类只存在一次——也就是说,如果您创建一个带有静态变量的类,那么该类的所有实例都将共享该变量。此外,如果它是一个公共静态变量,那么任何人都可以访问该变量,而无需先创建该类的实例 - 他们只需调用 Hero.staticVariableName;

静态方法/函数是无国籍的。也就是说,它们仅对以下信息起作用:(1) 传递给方法/函数的参数提供的信息,或 (2) 静态变量(上面指定的)中的信息,或 (3) 硬编码到方法/函数中的信息(例如,您创建一个静态函数来返回“hello”——然后“hello”被硬编码到该函数中)。

Eclipse之所以希望你以静态的方式访问静态方法,是因为它可以让你和后续的程序员看到你正在访问的方法是静态的(这有助于防止错误)。无论您采用哪种方式,该函数都会运行,但正确的方法是以静态方式访问静态函数。请记住,如果您调用静态方法,无论您从哪个实例变量(Tim.returnHp、Jim.returnHp、Mike.returnHp 等)调用它,您都会从英雄类中调用相同的函数,并且您将看到完全相同的内容行为,无论你从谁那里称呼它。

如果您创建了两个相同类型的对象,那么您不能指定以静态方式访问时返回哪一个;静态函数/方法将引用整个 Hero 类。

您能否解释一下您正在尝试做什么,以便我们提供更具体的反馈? returnHp() 很可能不应该是静态的。

这就是“回复生命值”吗?如果是,那么您不希望它是静态的,因为英雄拥有的生命值是英雄状态的一部分,而静态方法是无状态的。 (将状态想象为当前状况 - 活着、死亡、受伤、攻击、防御、上述的某种组合等)我建议进入 Hero 类并将 returnHp 更改为非静态方法。

现在……我知道你没有问,但我想建议你一件事:

类名(例如 Hero)应大写。实例变量名(例如mike)应该小写。这是一种广泛接受的命名约定,它将提高代码的可读性。

Jeff

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA:正确访问静态方法 的相关文章

  • 如何编写 Maven 构建脚本来执行 Java

    如何在构建过程中或构建刚刚完成后执行 Java 程序 可以直接从 pom 中执行此操作吗 mvn exec java Dexec mainClass org sonatype mavenbook weather Main EDIT 假设我想
  • 从txt文件中读取数据而不下载它?

    我想从提供的文本文件中解析信息 有没有一种方法可以在应用程序中执行此操作 而无需先下载文件 以某种方式传输文本内容 打开到 URL 的 Http 连接 使用内置 HttpURLConnection 或使用 commons httpclien
  • Java - 将无符号十六进制字符串解析为有符号长整型

    我有一堆十六进制字符串 其中之一是 d1bc4f7154ac9edb 这是 3333702275990511909 的十六进制值 如果执行 Long toHexString d1bc4f7154ac9edb 这与您得到的十六进制相同 现在
  • 从 Android 函数更新 Textview

    有人可以告诉我如何从函数更新 Android Textview 控件吗 我在互联网上进行了深入搜索 看到很多人都问同样的问题 我测试了线程但无法工作 有人有一个简单的工作示例吗 例如 调用一个函数 在循环中运行多次 并且该函数在 TextV
  • 在java代码中创建postgresql表

    我有一个与 postgreSQL 数据库连接的 java 代码 现在 我希望当它连接到数据库时 我还将创建数据库表 但我的问题是 它不会创建数据库 我不知道问题是什么 这是我的代码 Statement st null ResultSet r
  • Selector.close() 是否关闭所有客户端套接字?

    我是 nio 套接字的新手 我已经使用 nio 套接字编写了一个服务器 现在我正在尝试编写关闭钩子以确保通过清理资源正常退出 我的问题是Selector close 方法关闭所有客户端套接字 如果没有 请告诉我如何访问所有客户端套接字 而无
  • 如何杀死 Java Future?

    我正在开发的服务使用 Future 来并行运行多个任务 每个任务最多可能需要一分钟才能完成 然而 外部库似乎有问题 因为在某些情况下 2 的时间 它不会返回 在这些情况下 我想给出 2 分钟的等待时间 如果还没有返回 我想杀死 future
  • Android 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) libwebviewchromium.so

    对于 android 4 4 我多次收到 Native crash at system lib libwebviewchromium so 错误 以下是设备包括 Xperia Z1 SO 01F 16 30 2 Galaxy Tab4 7
  • 使用 https 的 Web 服务身份验证给出错误

    我编写了一个简单的 Web 服务 并使用摘要和 HTTPS 身份验证来保护它 我已经使用 Java 中的 keytool 生成了我的证书 当我通过创建 war 文件在 Tomcat 中部署 Web 服务时 axis 的欢迎页面正确显示 但是
  • java:为什么主线程等待子线程完成

    我有一个简单的java程序 主线程 main 创建并启动另一个线程t class T extends Thread Override public void run while true System out println Inside
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • 如何获取 JDBC 中 UPDATE 查询影响的所有行?

    我有一项任务需要使用更新记录PreparedStatement 一旦记录被更新 我们知道更新查询返回计数 即受影响的行数 但是 我想要的不是计数 而是受更新查询影响的行作为响应 或者至少是受影响的行的 id 值列表 这是我的更新查询 UPD
  • 获取接收者的设备令牌以在 Firebase 中发送通知

    所以我正在学习如何使用 firebase 发送设备到设备的通知 我看到了这个answer https stackoverflow com a 42548586 5237289发送通知 看起来很简单 现在 我知道要获取发件人的令牌 它应该如下
  • 如何在一次操作中使用 Thymeleaf 检查 null 和空条件?

    有什么方法可以检查 Thymeleaf 中的 null 和empty 条件吗 方法一 1 variable1 variable2 variable3 2 variable null 3 variable 如果我们结合两个条件 例如 vari
  • 如果 Modelmapper 中的整个属性为空,如何排除它们

    ModelMapper 是否 http modelmapper org http modelmapper org 支持什么排除属性 如果该值为空 我刚刚找到了 PropertyMap 但这对我来说是一种限制 因为我必须描述我想要的特定属性
  • 如何更改 JAX-WS Web 服务的地址位置

    我们目前已经公开了具有以下 URL 的 JAX RPC Web 服务 http xx xx xx xx myservice MYGatewaySoapHttpPort wsdl http xx xx xx xx myservice MYGa
  • Spring MVC:通用 DAO 和服务类

    我正在 Spring MVC 中编写网页 我使用 Generic DAO 编写了所有 DAO 现在我想重写我的服务类 我该如何写 通用服务 我的 DAO 如下 DAO package net example com dao import j
  • 用于生成 ISO 文件的 Maven 插件

    有没有可以生成ISO镜像的maven插件 我需要获取一些模块的输出 主要是包含 jar 的 zip 文件 并将它们组合成一个 ISO 映像 Thanks 现在有一个 ISO9660 maven 插件可以完成这项工作 https github
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • JPA ManyToMany 产生的空联接表

    我有一个应用程序 其中我尝试使用 Hibernate 作为 JPA 提供程序来实现两个实体之间的多对多关系 我正在尝试的例子是一个单向的 其中一个相机可以有多个镜头 而镜头可以安装到多个相机中 以下是我的实体类 只需粘贴其中的相关部分 Ca

随机推荐

  • 从文本文件中删除空行[重复]

    这个问题在这里已经有答案了 我有一个文本文件 其中有一些空行 意思是上面没有任何东西并且只是占用空间的线条 它看起来像这样 The quick brown fox jumped over the lazy dog 我需要它看起来像这样 Th
  • C++ 如何避免浮点运算错误[重复]

    这个问题在这里已经有答案了 我正在编写一个以浮点数递增的循环 但我遇到了以下示例所示的浮点算术问题 for float value 2 0 value lt 2 0 value 0 2 std cout lt lt value lt lt
  • 使用中央数据库在多用户环境中更新实体框架数据

    让我解释一下标题 我在应用程序中使用实体框架代码优先 测试应用程序 出于调试目的TestApp连接到 SQLExpress 数据库 中央数据库服务器 为了简单起见 数据库包含一张表 Products TestApp 在数据网格中显示数据库中
  • 创建文件时出现 System.UnauthorizedAccessException

    我试图编写代码以便记录错误消息 我试图用日期命名该文件 并希望每天创建一个新的日志文件 经过一番查看后 我得到了以下代码 class ErrorLog public void WriteErrorToFile string error ht
  • 为什么在字符指针上使用 strcat 会崩溃? [复制]

    这个问题在这里已经有答案了 为什么这段代码会崩溃 正在使用strcat字符指针非法 include
  • 更新 iframe、历史记录和 URL。然后使其与后退按钮一起使用

    当点击浏览器上的后退按钮时 我在更新 URL 时遇到问题 我正在 Firefox 上进行测试 更新我使用的 iframe 的 src 属性后replaceState更新历史记录 如果我在此之后点击后退按钮 iframe 将返回到上一页 但
  • opencart php自定义页面不使用“信息”功能

    我想在 opencart 中创建一个自定义页面 我知道我可以使用管理区域在信息部分放置一个自定义页面 但是我想要的是一个指向其他几个页面的控制器 我不完全明白如何做到这一点 在 codeigniter 中 您将创建一个控制器和一个视图 如果
  • Python:更改 Windows 7 主音量

    我希望能够在 Python 中控制主音量 不是针对应用程序 而是针对当前活动扬声器 这似乎是一个棘手的话题 我尝试用 C 来做 但我什至无法让它在那里工作 有办法做到这一点吗 Windows 7 x64 请注意 这个问题之前没有得到回答 因
  • Camera2 API 自动对焦与三星 S5

    我正在 Samsung S5 上使用新的 Camera2 API 该设备报告的支持的硬件级别是LEGACY 这很好 但是 我似乎无法自动对焦该设备 触发自动对焦的请求如下所示 previewRequestBuilder set Captur
  • 拒绝使用ajax调用Rest服务器设置不安全标头“Cookie”

    我正忙于构建一个与我的 Drupal Rest 服务器 模块 服务 连接的 Phonegap 应用程序 我的 Drupal 网站 PHP 的代码为 header Access Control Allow Origin 当我尝试使用以下代码连
  • cxf + wss4j + maven NoSuchMethod 错误

    尝试使用maven使用cxf wss4j 创建服务和客户端 没有任何编译问题 该服务在tomcat中运行良好 Issue 当我运行客户端代码时 我得到 java lang NoSuchMethodError org apache xml s
  • Apache Oltu Linkedin 集成示例

    我期待着开发Spring MVC Apache Oltu Linkedin集成示例 在此示例中 您需要发送客户端 ID 和客户端密钥才能从链接站点访问私有资源 第一步 我们需要在 Linkedin 中创建应用程序 请按照以下步骤操作 htt
  • laravel“解析错误:语法错误,意外的'const'(T_CONST),期望变量(T_VARIABLE)”

    我将我的 laravel 项目从本地移动到共享主机 但 laravel 给出了这个错误 Parse error syntax error unexpected const T CONST expecting variable T VARIA
  • 如何在 Laravel 4 中创建自定义 Facade

    查找了一些关于 Facades 和 Laravel 4 的教程 尝试了一些 不喜欢它们的工作方式 例如 它们并不都提供一种定义在哪里存储外观文件和服务提供者的方法 我试图摆脱这一点 但我的头撞到了几堵墙 直到我决定做这个线程 所以 假设我有
  • WinSCP .NET 程序集:在哪里定义代理?

    我可以使用 WinSCP GUI 定义代理服务器 如果我这样做 我就可以连接到远程主机 但在代码中我没有找到为 WinSCP 声明代理服务器的方法 在这种情况下我收到 远程服务器返回错误 407 需要代理身份验证 My code Sessi
  • 将 csv 文件转换为 PHP 二维数组

    我是 PHP 新手 一直在努力将 CSV 文件读入二维数组 我使用以下文件 csv team csv ID Nickname Shirtnumber Position 1 Jimmy 0 RightBack 2 Mark 3 CentreB
  • Hibernate/JPA - 访问 SingularAttribute 参数时出现 NullPointerException

    我正在尝试将 JPA2 类型安全标准查询与 Hibernate 5 0 7 Final 一起使用 criteria where builder equal root get SingularAttribute attr value wher
  • 如果没有指定目标,“make”应用程序如何知道要构建的默认目标?

    大多数 Linux 应用程序都是通过以下方式编译的 make make install clean 据我了解 make命令将构建目标的名称作为参数 例如install通常是将一些文件复制到标准位置的目标 并且clean是删除临时文件的目标
  • 在表单中搜索具有多个字段的 MySQL 数据库

    我创建了一个表单 用户可以在其中搜索数据库 结果取决于用户如何填写表单 例如 假设我有姓名 地 址 城市 州和邮政编码字段 并且用户填写了姓名和城市字段 结果会反映输入 当表单提交时 所有记录都会显示 为此我写了这个 if isset PO
  • JAVA:正确访问静态方法

    我是JAVA新手 我喜欢尝试并理解一切 在JAVA中访问静态方法 hero returnHp 时 我有以下内容 hero Mike new hero Mike returnHp 程序运行良好 但我注意到 Eclipse 有一条警告 指出 英