【问题标题】:how to auto increase data field in java oop classjava - 如何在java oop类中自动增加数据字段
【发布时间】:2013-05-21 17:22:07
【问题描述】:

我有这门课

public class NInfo {
private  int val;
private static int indx=1;

public NInfo(int val) {
    this.val = val;
    this.indx++;
    }
}

我想在我创建的每个新对象中自动增加索引 1 这段代码不起作用,我该修复什么?

【问题讨论】:

  • 这应该可以,但是你必须使用NInfo.indx++ 而不是this.indx++(或者甚至只是indx++)。旁注:这是一个口味问题,但我会将该字段命名为 index 而不是 indx(无需删除 e)。
  • 创建另一个变量index 并将其设置为this.indx++。静态变量属于类,不属于对象。
  • 你觉得这里发生了什么?

标签: java class auto-increment


【解决方案1】:

类的每个实例都共享一个静态字段。您需要将该值存储在特定于实例的新字段中。

public class NInfo {
private  int val;
private int index;
private static int indx=1;

public NInfo(int val) {
    this.val = val;
    this.index = indx++;
    }
}

我很想知道您为什么要将这些索引添加到每个类。

【讨论】:

  • 你可能想预先增加它。 indx 也是静态的,不应与 this 一起引用。
  • @cogsmos 刚刚注意到静态片段。为什么要预增?第一个实例的值为 2?
  • 这也不是线程安全的,但这可能不是这个应用程序的问题。
【解决方案2】:

类的每个对象都具有类中定义的所有属性和方法,静态对象除外。静态变量和方法不是类实例的一部分。 this. 运算符用于引用类的特定实例。要引用静态变量,您无需实例化对象。您可以使用 ClassName.variableName 直接引用变量。因此,每次在代码中创建变量的新实例时,indx 都会递增(从 2 开始,因为您已经对其进行了后递增)。

为了给一个对象分配一个新的递增值,递增 indx 并将它分配给一个实际上是类实例一部分的变量(即一个非静态变量)。

【讨论】:

    【解决方案3】:

    你应该像属性一样在构造函数中传递索引,并增加你创建的索引

    【讨论】:

    • 你应该改写这个答案;我根本不清楚你想说什么。
    【解决方案4】:

    你忘记了赋值operator操作。

    NInfo.indx += 1;
    

    编辑

    public class NInfo {
    
      private int id;
      private int value;
    
      private static int index; // auto initialized to 0
    
      public NInfo(int value) {
        this.val = val;
        this.id = NInfo.index += 1;
      }
    
    }
    

    【讨论】:

    • += 1++ 完全相同。
    • @sp00m 是的,我知道。我喜欢我的代码不那么冗长。 (NInfo.indx = ++NInfo.indx;) 只是节省一些击键队友。你误会我了。
    • @sp00m 这是一个品味问题。 :)
    • 不,我的意思是 i = i + 1i += 1i++ 都是相等的。 i = ++i 将值增加两倍。
    • 没有@sp00m,为什么 i = ++i 会增加两次?它会先递增然后分配,但只会递增一次。
    猜你喜欢
    • 2012-10-21
    • 1970-01-01
    • 2017-07-07
    • 2020-09-04
    • 2021-10-20
    • 1970-01-01
    • 2016-02-20
    • 2013-06-06
    • 1970-01-01
    相关资源
    最近更新 更多