Java:多对象变量(静态)

时间:2017-04-13 14:14:53

标签: java static

我是面向对象编码的新手,我有以下问题。

(请注意,this解决方案是我问题的一部分)

我需要一个许多对象可以引用的变量,但保留一些" private"每个对象的信息。更具体地说,我创建了一个名为procedure TForm1.ComboBox1Select(Sender: TObject); begin case ComboBox1.ItemIndex of 0: ComboBox1.Hint := '05498762'; 1: ComboBox1.Hint := ''; . . . end; end; 的类,我希望该类的每个对象都具有类型为Worker的唯一ID。所以,第一个对象有int,第二个ID=1等...请注意,我不想要一个随机整数,而我需要从0开始计数并增加...

在类

中声明和初始化变量
ID=2

我尝试通过在构造函数体

中添加这行代码来实现增量
static private int workId = 0;

我实例化一些对象,将它们添加到workId++; 并使用for循环我打印每个对象的变量。

ArrayList

System.out.println("Worker ID: "+workerList.get(i).getWorkerId()); (类方法)由

组成
getWorkerId()

问题是我的程序不会打印每个唯一的public int getWorkerId () { return this.workId; } (因为它没有),而是静态变量的最后一个值(恰好是对象的数量)。< / p>

你能描述一下我的问题的解决方案吗?

2 个答案:

答案 0 :(得分:7)

评论转过来了答案:

您已走上正轨。

目前,您创建的每个工作人员都会增加您的静态成员。这意味着它不会保存工作人员的ID(这可能不是这样,因为静态变量属于而不是单个实例 ),而是保存到目前为止您创建的工作人员总数

<强>修正

  • 将您的静态成员重命名为numWorkers,以便反映它的作用
  • 介绍另一个(非静态)成员,id(或workerId,如果您愿意)
  • workId++更改为id = ++numWorkers

<强>为什么吗

现在,每个工人都有自己的id。您可以通过查看当前创建的工作人员数(numWorkers)来分配它,将该值递增1,然后将其分配给id。这样,您的第一个工作人员ID将为1,第二个将为2,依此类推。 numWorkers始终保留创建的工作人员数量,这与您分发的最后一个ID同时存在。

放在一起

由于这个问题得到了很多赞成(=兴趣),我将上述内容总结为蓝图:

public class Worker {
    private static int numWorkers; // Number of Worker objects created
    private int id;                // Individual ID of a worker

    public Worker() {
        id = ++numWorkers; // Will be 1 for the first, 2 for the second, ...
    }

    public int getID() {
        return id;
    }

    public static int getNumWorkers() {
        return numWorkers;
    }
}

请注意,在Java中,您不需要将primitive type int初始化为0,因为default value为{ {1}}。当然,无论如何都可以这样做 - 明确地说它永远不会伤害。

答案 1 :(得分:4)

你实际上非常接近成功。

您可能已经知道,静态成员属于类本身,而不属于每个实例。但正如您所说,每个工作人员都应拥有自己的唯一ID,因此 <meta charset="UTF-8"> <title>Product Pagea</title> <link rel="stylesheet" type="text/css" href="style.css" media="screen" /> <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700,900" rel="stylesheet"> <link rel="stylesheet" href="image_hover_own.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <style type="text/css"> /* css try & sample code start */ p, h1, h2, h2, h3, h4, h5 { font-family: 'Lato', sans-serif; } /* CSS TRY & SAMPLE CODE START */ .produkt-img { padding-bottom: 133.33333%; /* <= height / width */ background-size: cover; } .produkt-1 { background-image: url('Images/x_freund_faserland_vierer_manufaktur_berlin_moebel.jpg'); } .produkt-2 { background-image: url('Images/x_freund_monument_dreier_manufaktur_berlin_moebel.jpg'); } .produkt-3 { background-image: url('Images/wood_fill_up.jpg'); } .produkt-4 { background-image: url('Images/x_freund_naturbursche_vierer_manufaktur_berlin_moebel.jpg'); } .produkt-box-overlay-text { width: 100%; text-align: center; position: absolute; top: 80%; left: 50%; transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); } .produkt-overlay:before{ position: absolute; content:" "; top:0; left:0; width:100%; height:100%; display: none; z-index:0; } .produkt-overlay:hover:before{ display: block; } .overlay-farbe:before { /* grauer overlay background-color: rgba(50, 50, 50, 0.05)*/ background-color: rgba(199, 87, 36, 0.1); } .col-sm-3, produkt-width { padding: 0px; margin: 0.5%; width: 23.75%; } .col-sm-3 extra-margin { margin-left:1%; } /* CSS TRY & SAMPLE CODE END */ </style> </head> <body> <!-- HTML TRY & SAMPLE CODE START --> <div class="container-fluid"> <div class="row"> <div class="col-sm-3 col-xs-6 produkt-width produkt-overlay overlay-farbe"> <div class="produkt-img produkt-1"></div> </div> <div class="col-sm-3 col-xs-6 produkt-width produkt-overlay overlay-farbe"> <div class="produkt-img produkt-2"></div> </div> <div class="col-sm-3 col-xs-6 produkt-width produkt-overlay overlay-farbe"> <div class="produkt-img produkt-3"></div> </div> <div class="col-sm-3 col-xs-6 produkt-width produkt-overlay overlay-farbe"> <div class="produkt-img produkt-4"></div> </div> </div> </div>不应该是静态的。

但是,我们仍然需要一个静态变量来跟踪应该给我们创建的下一个worker的id。让我们声明一个:

workId

然后,在您的构造函数中,您将static private int nextWorkId = 0; 分配给nextWorkId,然后递增workId

nextWorkId

您也可以这样写:

workId = nextWorkId;
nextWorkId++;