在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
方法分配了一个值。如果变量是大数据集,唯一的收益内存分配只会显着影响性能吗?在这方面,公共和私人之间也有什么区别?
答案 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
不会更改。因此,您不必担心更改会破坏您的整个代码。