Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android实例变量_Java_Android_Performance - Fatal编程技术网

Java Android实例变量

Java Android实例变量,java,android,performance,Java,Android,Performance,实例变量优先于局部变量,反之亦然?例如,使用SharedReferences,应该在类的顶部声明它,然后在整个过程中引用它,还是应该在需要它的每个方法中声明它 我想知道,由于实例变量的持续时间与活动的持续时间一样长,内存使用是否会有很大的差异;但是,它会更干净,因为我不需要在它使用的每个方法中实例化它。你应该在任何一天都喜欢局部变量而不是类变量 有很多实例变量会影响不同方法中的代码执行,这会给您带来很多状态。这使得你很难对它进行推理,例如,当你试图一步一步地通过你头脑中的一个函数来发现一个bug

实例变量优先于局部变量,反之亦然?例如,使用
SharedReferences
,应该在类的顶部声明它,然后在整个过程中引用它,还是应该在需要它的每个方法中声明它


我想知道,由于实例变量的持续时间与活动的持续时间一样长,内存使用是否会有很大的差异;但是,它会更干净,因为我不需要在它使用的每个方法中实例化它。

你应该在任何一天都喜欢局部变量而不是类变量

有很多实例变量会影响不同方法中的代码执行,这会给您带来很多状态。这使得你很难对它进行推理,例如,当你试图一步一步地通过你头脑中的一个函数来发现一个bug时

我想更进一步,通过创建不操纵对象状态
static
的方法,并将它们所需的一切作为参数传递。这样,您就可以看到这个与类上下文完全隔离的函数我的目标是以非常容易推理的方式结束。

如果有必要使这些功能中的一个变得不纯,那可能表明设计决策很糟糕


但是,在类级别“缓存”它们是有意义的:

  • 布局中的视图
    findViewById()
    的成本惊人,因此,如果您在不止一个方法中需要一个视图,那么您应该“缓存”它。图书馆使这很容易
  • 数据库连接或任何与打开/关闭数据库连接相关的成本很高的连接但是,不要让那些“躺在”你的活动中。将它们隐藏在类中,并使该类负责处理打开的资源

一般来说:类变量使类更具状态性。这对于本质上是状态完整的类(例如
活动
片段
)来说是很好的,但是您应该尽量减少您需要担心的状态量。

您应该在任何一天都喜欢局部变量而不是类变量

有很多实例变量会影响不同方法中的代码执行,这会给您带来很多状态。这使得你很难对它进行推理,例如,当你试图一步一步地通过你头脑中的一个函数来发现一个bug时

我想更进一步,通过创建不操纵对象状态
static
的方法,并将它们所需的一切作为参数传递。这样,您就可以看到这个与类上下文完全隔离的函数我的目标是以非常容易推理的方式结束。

如果有必要使这些功能中的一个变得不纯,那可能表明设计决策很糟糕


但是,在类级别“缓存”它们是有意义的:

  • 布局中的视图
    findViewById()
    的成本惊人,因此,如果您在不止一个方法中需要一个视图,那么您应该“缓存”它。图书馆使这很容易
  • 数据库连接或任何与打开/关闭数据库连接相关的成本很高的连接但是,不要让那些“躺在”你的活动中。将它们隐藏在类中,并使该类负责处理打开的资源

一般来说:类变量使类更具状态性。这对于本质上是状态完整的类(例如,
Activity
Fragment
)是很好的,但是您应该尽量减少需要担心的状态量。

这取决于您希望对该变量的使用。如果你想要一个在整个类中需要的变量,你需要在类的顶部声明它,但是如果相反,你要声明的变量只是在一个方法上使用,你应该在这个方法中声明它

我不能告诉您它使用的内存是更多还是更少(这些概念我真的不知道),但我可以确保您的代码以这种方式更加清晰

我对此不放心,但我认为每次声明一个变量都会占用一点内存,因此,总之,如果每个方法中都有一个变量,而不是在类的顶部,那么会占用更多内存。如果有人知道这一点,必须纠正我,请这样做


我希望这会对你有所帮助

这取决于您希望该变量的用途。如果你想要一个在整个类中需要的变量,你需要在类的顶部声明它,但是如果相反,你要声明的变量只是在一个方法上使用,你应该在这个方法中声明它

我不能告诉您它使用的内存是更多还是更少(这些概念我真的不知道),但我可以确保您的代码以这种方式更加清晰

我对此不放心,但我认为每次声明一个变量都会占用一点内存,因此,总之,如果每个方法中都有一个变量,而不是在类的顶部,那么会占用更多内存。如果有人知道这一点,必须纠正我,请这样做


我希望这会对你有所帮助

这个问题似乎归结为时间/空间的权衡,在这种情况下,我会说答案取决于时间。通常情况下,我倾向于在构建对象时只读取一次持久化对象,尤其是在这样做会带来很大的性能成本的情况下。然而,如果在内存中处于溢价状态,并且存储所涉及的对象是空间成本过高的,那么我会考虑在需要的基础上读取它。

< P>这个问题似乎归结为时间/空间权衡,其中CAS。