public class myObject extends someOtherObject(){
final int MAINBOX_X = 0;
final int MAINBOX_Y = 1;
final int BUTTON_X = 2;
final int BUTTON_Y = 3;
final int TEXT_X = 4;
final int TEXT_Y = 5;
public myObject(int x, int y){
super();
//'coordinates' is an array of pairs, x and y for example
coordinates[MAINBOX_X] = x;
coordinates[MAINBOX_Y] = y;
coordinates[BUTTON_X] = coordinates[MAINBOX_X]+10;
coordinates[BUTTON_Y] = coordinates[MAINBOX_Y]+10;
coordinates[TEXT_X] = coordinates[MAINBOX_X]+10;
coordinates[TEXT_Y] = coordinates[MAINBOX_Y]+50;
//This aids readability because the alternative would be:
//coordinates[0] = x; //Where 0 is the index representing the object's x coordinate
//coordinates[1] = y; //Where 1 is the index representing the object's y coordinate
//coordinates[2] = coordinates[0]+10;
//coordinates[3] = coordinates[1]+10;
//etc....
//This could easily get very confusing without using proper/recognisable names!
}
}
现在如果我创建很多论文对象。假设其中有 400 个。 (注意,这只是一个简单的例子,实际项目中不仅仅只有X和Y值)。
我已经阅读了所有“statics are bad”之类的帖子,我想了解的是当我创建所有这些对象时,内存中会有这些最终 int 的多个副本——这似乎没有必要我的值(value)观始终相同。
但是,如果我将它们声明为静态/类变量,那么所有对象都将共享一个变量副本,因此只会创建一个副本 - 内存效率更高?
单独的静态类
另一种方法是创建一个“值”类并容纳静态数据——只是为了保持整洁。 (尽管说实话,我可以简单地将原始类/对象的引用传递给需要访问这些值的类)。
为此目的使用静态/类变量是否可以接受?如果没有,什么是更好的选择?
最佳答案
假设你有 100 个 MyObject 对象,所有成员都是最终的和静态的。这意味着所有这 100 个对象都具有相同的不可更改的静态变量,因为最终的。所以你不能在其他 99 个对象中更改这些成员。所以你在您的情况下不能同时使用 static 和 final。
只考虑没有 final 的静态成员。这意味着您不需要创建 MyObject 类的实例对象,因为您可以通过类名在任何地方(您想要将这些变量传递到那里的地方)使用这些变量。
如果您希望每个实例对象都有特定的变量,您可以在使用实例对象和非静态和非最终变量后更改这些变量。
我认为在您的情况下使用静态变量很好,因为所有 100 个对象都使用相同的变量和相同的值。因此您不会为所有对象占用额外的内存。实际上您不需要 100 个对象。您只需要一个类及其静态非最终变量
关于java - 使用变量/静态变量到 'name' 值以提高可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30290771/