摆脱对象的参考

时间:2015-03-11 13:36:59

标签: java variables object reference instance

我想在我的测试人员课程中删除每个对象的引用,但是我收到了错误。我使用的方法是在笔记中给出的,但不确定它们是否正确。

任何帮助将不胜感激:)

这是我的代码:

public class Bicycle {

// Instance Variables
private String name; // Owner's name
private int age; // Owner's age
private char gender; // Owner's gender
private static int instanceCounter = 0;

// Default Constructor - doesn't take in values
public Bicycle() {
    this("Not Given", 0, 'U');
    instanceCounter++;
}

// Parameter constructor
public Bicycle(String name, int age, char gender) {
    this.name = name;
    this.age = age;
    this.gender = gender;
    instanceCounter++;
}

// Getter and setters
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}

public char getGender() {
    return gender;
}
public void setGender(char gender) {
    this.gender = gender;
}

public int countInstances(){
    return instanceCounter;
}
}

测试仪:

public class BicycleTester {

  public static void main(String args[]){


    // Instance one
    Bicycle bicycle1 = new Bicycle(null, 0, 'U');
    bicycle1.setName("John");
    System.out.println("Name: " +bicycle1.getName());
    bicycle1.setAge(18);
    System.out.println("Age: " +bicycle1.getAge());
    bicycle1.setGender('M');
    System.out.println("Gender: " +bicycle1.getGender());

    System.out.println("");

    // Instance two
    Bicycle bicycle2 = new Bicycle(null, 0, 'U');
    bicycle2.setName("Mary");
    System.out.println("Name: " +bicycle2.getName());
    bicycle2.setAge(23);
    System.out.println("Age: " +bicycle2.getAge());
    bicycle2.setGender('F');
    System.out.println("Gender: " +bicycle2.getGender());

    System.out.println("");

    // Instance three
    Bicycle bicycle3 = new Bicycle(null, 0, 'U');
    bicycle3.setName("Billy");
    System.out.println("Name: " +bicycle3.getName());
    bicycle3.setAge(15);
    System.out.println("Age: " +bicycle3.getAge());
    bicycle3.setGender('M');
    System.out.println("Gender: " +bicycle3.getGender());

    System.out.println("");

    // Three ways to get rid of object's reference
    void go() {
        Life bicycle1 = new Life();
    }

    Life bicycle2 = new Life();
    bicycle2 = new Life();

    Life bicycle3 = new Life();
    bicycle3 = null;

}

}

2 个答案:

答案 0 :(得分:2)

Ok Ma' am让我们再次了解基础知识。

我们将从 Object AKA 实例引用之间的区别开始。

Life bicycle2 = new Life();

此处,bicycle2引用,它将位于堆栈上。该引用指向instance调用创建的new Life()。该实例将位于

您无法删除对象的引用。你可以摆脱一个实例。 这样做只有一种方法。

  1. 将指向实例的引用设置为nullto some other instance 示例:Life bicycle2 = new Life();        bicycle2 = null;// the instance created above will be eligible for GC
  2. 或者您也可以这样做:

    Life bicycle2 = new Life(); bicycle2 = new Life(); //将丢弃上面创建的生命实例。

    请注意:引用范围相关一旦超出范围,就无法访​​问它。我不认为你在这里谈论这个。

答案 1 :(得分:0)

对于无参数构造函数,您需要两次递增instanceCounter - 一次使用参数调用另一个构造函数时,以及一次在no-args构造函数中完成时。

你也没有在任何地方递减计数,所以如果你正在使用它作为一种方法来跟踪你班级中有多少实例,那么你的计数就会被取消。