Java - 覆盖对象列表

时间:2017-11-18 14:56:45

标签: java list object arraylist overwrite

我开始学习更多关于Java的知识并被困在这里: 想要制作包含值,索引和休息的对象,并在main方法中创建对象列表。 通过向列表添加新对象,前一个条目将被覆盖。

到目前为止,这是我的代码:

    public class LNGHW {

        public static int value;
        public static int index;
        public static int rest;

        public LNGHW(int val, int index, int mod) {
            this.value = val;
            this.index = index;
            this.rest = mod;
        }

        public static void main(String[] args) {
            ArrayList<LNGHW> items = new ArrayList<LNGHW>();

            items.add(new LNGHW(4, 0, 1));
            items.add(new LNGHW(2, 1, 1));

            System.out.println(items.get(0).getValue());
            System.out.println(items.get(1).getValue());
        }

        public int getValue() {
            return value;
        }

        public static void setValue(int value) {
            LNGHW.value = value;
        }

        public static int getIndex() {
            return index;
        }

        public static void setIndex(int index) {
            LNGHW.index = index;
        }

        public static int getRest() {
            return rest;
        }

        public static void setRest(int rest) {
            LNGHW.rest = rest;
        }
   }

我愿意接受各种帮助!

1 个答案:

答案 0 :(得分:0)

import java.util.*;
import java.lang.*;
import java.io.*;

 class LNGHW {
public  int value; /*made them  non-static*/
public  int index;
public  int rest;

public LNGHW(int val, int index, int mod) {
    this.value = val;
    this.index = index;
    this.rest = mod;
}

public static void main(String[] args) {
    ArrayList<LNGHW> items = new ArrayList<LNGHW>();

    items.add(new LNGHW(4, 0, 1));
    items.add(new LNGHW(2, 1, 1));

    System.out.println(items.get(0).getValue());
    System.out.println(items.get(1).getValue());
}

public int getValue() {
    return this.value;
}

public void setValue(int value) {      /*made these values non-static*/
    this.value = value;          /*set the values of object using **this**,not class name */
}

public int getIndex() {
    return this.index;
}

public void setIndex(int index) {
    this.index = index;
}

public int getRest() {
    return this.rest;
}

public  void setRest(int rest) {
    this.rest = rest;
}}

要了解它为何会发生这种情况,您需要了解java中的静态非静态关键字。请研究一下它们,然后就可以了解其中的差异。

STATIC - 当我们希望任何属性对于类的每个对象都相同时,我们使用static关键字。例如 - 假设有一个 MAN 类,并且年龄性别等属性很少,那么不同对象的年龄会有所不同man class,即 age 属性是对象级属性,因此它将是非静态的。而 MAN 类的每个对象的性别都是男性,因此它是一个类级属性,因此它应该是静态的。

最后,只要有类级属性,我们就使用静态变量,否则对于对象级属性,我们使用非静态变量。

我们使用 this 关键字来引用非静态变量,其中类名用于引用静态变量。