2

id次のオブジェクトが2などになるように、1から始めて生成する方法を知っている人はいますか?

私は次のことを試しましたが、うまくいきません:

class students{

    private int id;
    private String name;

    public student(String name){
        this.id=id++;
        this.name
    }
}
4

3 に答える 3

4

静的変数を使用してカウンターを追跡することは、非常に限られた状況で機能することに注意してください。

このコードを複数のマシンで実行することはできません。たとえば、Webアプリケーションの場合はWebクラスターです。また、静的変数は一時的なものであり、アプリケーションを再起動するとリセットされます。

シーケンシャルIDを生成するための一般的な解決策は、データベースを使用することです。ほとんどのデータベースには、これを行うための組み込みの方法があります。たとえば、 SQLServerIDENTITYまたはAUTO_INCREMENTMySQLで。

Hibernateのような永続性フレームワークの使用を検討してください。アイデンティティ、hilo、uuidなどの多くの実証済みの戦略の1つを宣言できます。これらの戦略には、シーケンシャルなものとそうでないものがあります。一部はアプリケーションによって生成され、一部はデータベースによって生成されますが、トレードオフは十分に文書化されており、自分が何に取り組んでいるのかがわかります。

于 2012-09-09T03:22:24.083 に答える
4

最後に使用されたインデックスを追跡するには、静的クラス メンバーが必要です。コピー コンストラクターも必ず実装してください。

class students
{
    private static int next_id = 0;   // <-- static, class-wide counter

    private int id;                   // <-- per-object ID

    private String name;

    public students(String name)
    {
        this.id = ++students.next_id;
        this.name = name;

        // ...
    }

    public students(students rhs)
    {
        this.id = ++students.next_id;
        this.name = rhs.name;

        // ...
    }

    public static void reset_counter(int n)  // use with care!
    {
        students.next_id = n;
    }

    // ...
}

更新: @JordanWhite が示唆するように、静的カウンターをatomicにしたい場合があります。これは、同時に使用しても安全であることを意味します (つまり、一度に複数のスレッドで)。そのために、タイプを次のように変更します。

private static AtomicInteger next_id = new AtomicInteger(0);

インクリメントおよび読み取り操作とリセット操作は次のようになります。

this.id = students.next_id.incrementAndGet();  // like "++next_id"

students.next_id.set(n);                       // like "next_id = n"
于 2012-09-09T02:22:19.497 に答える
0

とに変更する必要がprivate int id;ありprivate static int id;ます。id++++id

あなたが試すことができます:

class Students{
    private static int id;
    private String name;
    public Students(String name){
    this.id=++id; // this.id +=1;may be better 
    System.out.println(this.id);
    this.name = name;
   }
}

テストコード:

public class Test {
public static void main(String[] args) {
    Students s1 = new Students("Mark1");
    Students s2 = new Students("Mark2");
}

}

于 2012-09-09T02:34:28.397 に答える