Java 摆脱一个对象';s参考

Java 摆脱一个对象';s参考,java,variables,object,reference,instance,Java,Variables,Object,Reference,Instance,我想在tester类中去掉每个对象的引用,但是我得到了错误。我使用的方法是在笔记中给我的,但不确定它们是否正确 任何帮助都将不胜感激:) 这是我的密码: 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

我想在tester类中去掉每个对象的引用,但是我得到了错误。我使用的方法是在笔记中给我的,但不确定它们是否正确

任何帮助都将不胜感激:)

这是我的密码:

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;

}

}

好的,女士,让我们再复习一下基本知识

我们将从对象实例和引用之间的区别开始

Life bicycle2=新生命()

这里,
bicycle2
是一个引用,它将位于堆栈上。引用指向通过调用
newlife()
创建的
实例。实例将位于堆上

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

  • 将指向实例的引用设置为
    null
    指向其他某个实例
    示例:
    Life bicycle2=new Life()
    
    bicycle2=null;//上面创建的实例将符合GC的条件
  • 或者你也可以这样做:

    Life bicycle2=新生命()
    
    bicycle2=新生命()//上面创建的生命实例将被丢弃


    注意:引用是范围相关的,一旦它超出范围,它将无法访问。我认为您在这里谈论这个问题并不奇怪。

    对于无参数构造函数,您将增加instanceCounter两次-一次是在使用参数调用另一个构造函数时,一次是在无参数构造函数中完成时


    您也不会在任何地方递减计数,因此,如果您使用它作为跟踪内存中有多少类实例的方法,那么您的计数将被禁用。

    请发布错误以及“摆脱对象引用”的含义。你的意思是你想让它符合垃圾收集的条件吗?@MarcusWidegren是的,这就是我想要的