Java 是否可以更改最终变量(Android)的值?

Java 是否可以更改最终变量(Android)的值?,java,android,Java,Android,(我知道,final无法更改。但是如果您阅读我键入的示例,您可以理解我为什么要问这个问题!) 我正在阅读hello world Android应用程序示例: MainActivity.java public final static String EXTRA_MESSAGE = "com.example.helloworld.MESSAGE"; .... .... intent.putExtra(EXTRA_MESSAGE, message); 它是如何工作的?我们是否将消息值存储在额外消息

(我知道,
final
无法更改。但是如果您阅读我键入的示例,您可以理解我为什么要问这个问题!)

我正在阅读hello world Android应用程序示例:

MainActivity.java

public final static String EXTRA_MESSAGE = "com.example.helloworld.MESSAGE";
....
....
intent.putExtra(EXTRA_MESSAGE, message);
它是如何工作的?我们是否将消息值存储在额外消息中

此外,我可以存储多少个SharedReference数据?假设我的应用程序需要存储级别和高分,我该怎么做

public final static String HIGH_SCORE = "com.example.helloworld.HIGH_SCORE";
public final static String LEVELS = "com.example.helloworld.LEVELS";

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

如何更改上面的行以保存级别和分数?

否您不能更改分配后的值。这就是为什么它被称为决赛。您可以有许多首选项,因为它们只是文件

intent.putExtra(EXTRA_MESSAGE, message);
想想地图。这只是一种关键价值关系。额外消息是,消息是

说实在的,你知道-

preferences.edit().putString("name", "adam");
要获得,您可以使用您使用的密钥-

preferences.getString("name", "none"); 
教程和参考资料:

编辑1: 你的问题和原来的问题太不一样了。这是因为你只是误解了它

MainActivity.java

public final static String EXTRA_MESSAGE = "com.example.helloworld.MESSAGE";
....
....
intent.putExtra(EXTRA_MESSAGE, message);
这段代码并不意味着EXTRA_MESSAGE现在正在存储MESSAGE。它有点像一对键/值

这意味着:

Intent使用名为value of EXTRA_message的键存储消息的值,因此,如果将EXTRA_message的值传递给Intent,它将为消息提供一个值。
final
是固定的。它从不,从不改变它的值,所以它被称为FINAL

你也不能改变它。它始终被视为一个常数

有关更多帮助,请参阅。

此行:

intent.putExtra(EXTRA_MESSAGE, message)

表示您正在
EXTRA_message
键下的
Intent
内部映射中存储消息值。它不会以任何方式更改
额外消息
变量的内容。

意图中有一个包,其中包含要传递的参数。将其视为映射,因此当您编写

intent.putExtra(EXTRA_MESSAGE, message);
它将消息保存到名为EXTRA_message的字段中

因此,如果您想存储highscore和level,请使用:

public final static String HIGH_SCORE = "com.example.helloworld.HIGH_SCORE";
public final static String LEVELS = "com.example.helloworld.LEVELS";

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(HIGH_SCORE, newHighScore);
editor.putInt(LEVELS, level);
editor.commit();
请注意,如果您再次写入HIGH_分数或级别,它将覆盖当前值

如有疑问,请检查:

“静态”修改器与“最终”修改器一起还用于定义常量。最后一个修饰符指示此字段的值不能更改

这里的定义是:

public final static String EXTRA_MESSAGE = "com.example.helloworld.MESSAGE";
是一个保持不变的常数,否则,您可以在此处看到错误:

intent.putExtra(EXTRA_MESSAGE, message);
如果要更改
Extra_MESSAGE
,则将其以前的值作为键的
条目可能会“丢失”(更准确地说,是无法访问的,因为您没有将该值保存到其他地方)

为了保存更多信息,您将需要更多地图键。这意味着您在此处正确定义的字段:

public final static String HIGH_SCORE = "com.example.helloworld.HIGH_SCORE";
public final static String LEVELS = "com.example.helloworld.LEVELS";
可用于将这些值存储在给定的映射中,或任何您希望将其用作标识符的位置(基于键值结构)。这里的概念是,为了能够存储和检索数据,您必须定义一个可以通过游戏访问的常量

  • 我可以更改最后一个变量吗?
  • 正如您所说的,您也知道这一点,我们通常无法更改
    最终值
    值,但使用反射API这可能是可能的,请参见此

  • 这是如何存储的
    intent.putExtra(额外消息,消息)
  • 正如许多答案所说,putExtra以WAP的方式工作,其中一个特定的键映射到字符串、整数等类型的特定值。因此,在本例中,
    EXTRA\u MESSAGE
    作为键,而
    MESSAGE
    作为值

  • 我可以向SharedReferences添加多少值?
  • 顺便说一句,您可以添加多少SharedReference是没有限制的,这取决于您,但由于SharedReference主要与应用程序设置相关,虽然不是明确要求的,但我们可以选择将大型或个人应用程序数据存储到XML文件或数据库中

  • 如何保存代码以存储特定值

    editor.putInt(getString(R.string.saved_high_score), newHighScore);
    
    假设newHighScore是您想要存储的值,您可以选择更改
    getString(R.string.saved\u high\u score)
    到一个更具体的键,如级别号,这样下次更新时,分数将自动被覆盖


  • 您没有将任何内容存储到
    额外消息中
    intent
    对象正在存储
    message
    并使用
    EXTRA\u message
    作为键。因此,存储的
    消息
    随后可以通过
    意图
    通过查询
    额外消息
    “最终”来访问它,它自我描述它不能更改。@SamYonnou谢谢。。那么,“com.example.helloworld.MESSAGE”的目的是什么?@PrabhaVathi查看更新的答案了解意图发生了什么我认为您在这里需要小心。如果人们过于相信决赛的保证,他们肯定会在某个时候感到困惑/失望。如果数据类型是可变的,那么数据肯定可以更改,而不是引用。这个答案没有明确说明
    最终静态变量的值没有被覆盖。她的问题标题只是措辞不好,如果你读了这个问题,你会意识到她不想知道额外的信息或任何其他声明为final的变量是如何改变的。她想知道如何保存到共享首选项@我也想知道如何改变它们!你回答了我的问题。我想,当意念开始传送我的信息时,额外的信息=‘我的新信息’。我现在明白了!啊,我的坏消息@GriffeyDog。很高兴你的问题得到了回答,别忘了接受答案@Krishan 711当我重新打开应用程序时,我可以得到