已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。
3天前关闭。
Improve this question
我对对象计数器经过几次修改后所做的更改有疑问。
我希望计数器在创建每个对象后告诉它的值,这工作正常,但是当我分别为每个对象询问计数器的值时,它给出了相同的输出,尽管使用了“this”关键字,以便只有当前对象的计数器的值增加。计数器的示例变量对于此输出是静态的。当使用未修改的示例变量作为计数器时,每种情况下的输出都是1,这是可以理解的,所以我怀疑是否只创建了一个静态变量,或者这些更改是否应用于下面所附代码中的所有对象。
2条答案
按热度按时间2jcobegt1#
如果你想计算你的类中Object的个数,你可以在代码中做以下事情。
例如:- class CountObject { static int objectCount;{ ++ bytes;}公共静态void main(字符串str[]){
int count = new count();System.out.println();{\fnSimHei\bord1\shad1\pos(200,288)}
qni6mghb2#
计算示例化次数的一种方法是在类上放置一个
static
字段。在该字段中,存储一个递增的数字。static
为该类创建一个字段,而不涉及该类的任何示例。这实际上是一个global variable。通常最好避免全局变量,但有时它们也很方便。这样的静态字段不是面向对象的,因为它们存在于任何对象之外。所以你使用
this.someStaticField
是不合适的,也是误导性的。使用类名:Person.someStaticField
.如果有任何跨线程示例化的可能性,那么您必须采取措施保护
static
字段免受并发问题的影响。一种简单的保护方法是使用AtomicLong
对象。在下面的代码中,请注意我们是如何将字段声明与填充字段结合起来的,这意味着Java语言规范保证字段在创建外部类的任何示例之前被填充。
final
防止任何其他AtomicLong
示例替换我们的原始示例。需要说明的是,作为一个
static
,我们 * 没有 * 将递增计数附加到每个Person
对象。在这里看到的代码中,在每个Person
示例化时,我们递增数字,将该数字转储到控制台,然后忘记那个特定的数字。每个Person
对象不记得那个递增的数字,因为没有member field存储那个数字,只有一个class field(static
).我们有一个,只有一个,AtomicInteger
号码存在,而这个应用程序运行.示例代码:
请在Ideone.com上查看此代码。