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当我重新打开应用程序时,我可以得到