与Java(Android)中的局部变量相比,类变量/实例变量在性能上有好处吗?

时间:2019-03-30 07:54:53

标签: java android performance java-security android-lint

在Android中编程时,我经常在类中将变量定义为类/实例变量(在编辑之前为“全局”,感谢您的澄清)。如果以后需要访问它,请在naturalWidth中将其分配后,用另一种方法说。

对于以后我实际上没有访问它们的情况,Android Studio的Lint代码检查会引发警告,指出“字段可以转换为局部变量”。

我知道我将通过两种方式获得相同的功能,但是将Java中的内联/本地方法变量(特别是在Android上,但一般而言)与将它们声明为私有类/实例变量相比,对性能或安全性有何好处?在一堂课里?

编辑/澄清: “全局”一词是指该类的范围。 (我所知道的理解为被称为“类”或“实例”变量,我不好)可以由该类内的所有方法访问,而不是内联或方法特定的变量可以访问。也许有一种示例代码可以说明我的观点。例如:

onCreate()

这样做对性能有什么好处?如果以后发现添加功能或更改某些内容时需要在另一种方法中使用public class MyActivity { //Android Studio Lint will throw Java Class structure 'Field can be local' warnings //which is why I'm referring to these variables as "global" private SomeDataType myPrivateVariable1; //'Field can be converted to a local variable' public SomeDataType myPublicVariable1; //'Field can be converted to a local variable' private SomeDataType myPrivateVariable2; public SomeDataType myPublicVariable2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_activity_layout); //assign data to variables from either intent bundle or preferences or w/e myPrivateVariable1 = SOME_DATA; myPublicVariable1 = SOME_DATA; //AS will suggest change to: // SomeDataType myPrivateVariable1 = SOME_DATA; // SomeDataType myPublicVariable1 = SOME_DATA; myPrivateVariable2 = SOME_DATA; myPublicVariable2 = SOME_DATA; //AS Lint will throw warning that variables can be converted b/c only used here someMethod(myPrivateVariable1); someOtherMethod(myPublicVariable1); //run a method that uses the variables myMethodUsingVariable2(input); } private void myMethodUsingVariable2(DataType input) { //access the variables in multiple methods will not trigger the warning if (input == something) { //do something with 'myPrivateVariable2' and 'myPublicVariable2' } } } myPrivateVariable1,则编写使用这些数据的新方法(如果它们已经保存到)会更容易。已定义的类变量,并通过myPublicVariable1方法分配了一个值。如果变量是大数据集,唯一的收益内存分配只会显着影响性能吗?在这方面,公共和私人之间也有什么区别?

1 个答案:

答案 0 :(得分:1)

  

我经常在课堂上将变量定义为全局(私有)变量,而   在Android中进行编程。如果我以后需要访问它,请说   在onCreate()中分配了另一个方法之后。

您的意思是Class Scope变量的术语。

  

我知道我将以任何一种方式获得相同的功能,但是有没有   内联/本地方法变量的性能或安全性优势   Java(特别是在Android上,但一般而言)与声明它们   作为一个类中的私有全局变量?

使用方法范围变量的主要好处是 maintainability 。考虑以下具有类范围变量的类:

public class SampleClass {
  // a class scope variable
  private int mHeight;

  private int getSquareValueOfHeight() {
    return mHeight * mHeight;
  }

  private void increaseHeightByOne() {
    mHeight = mHeight + 1;
  }
}

我们有两种方法; getSquareValueOfHeight()读取mHeight的值并返回其平方值,而increaseHeightByOne()修改mHeight的值。

您可以看到,每当需要更改两种方法时,都需要检查mHeight。如果有3或5个或更多方法访问mHeight,该怎么办?您必须重新检查所有方法,以确保更改不会破坏您的整个代码。

现在考虑以下课程:

public class SampleClass {

  private int height;

  private int getSquareValueOfHeight(int value) {
    int height = value * value;
    return;
  }

  private int increaseHeightByOne(int height) {
    return height + 1;
  }

}

我们有两种使用其参数值的方法。 getSquareValueOfHeight()将返回一个平方值,而无需修改类范围height变量,因为它具有自己的height变量(这是一种影子机制)。当您调用以下代码时:

 SampleClass sampleClass = new SampleClass();
 int value = sampleClass.getSquareValueOfHeight(5);

类范围变量height不会更改。因此,您不必担心更改会破坏您的整个代码。