Java create a unique ID for each instantiated object using instance methods instead of class/static methods

SeesSound picture SeesSound · Feb 17, 2016 · Viewed 38.6k times · Source

Quite new to this so I hope I have the terminology in the title right.

I am trying to figure out how to create an instance method that will do the following:

--An ID number is returned.

--As each object is created from the class constructor(instantiated?), a unique integer ID number is assigned to it. The first ID number is 1, and as new objects are instantiated, successive numbers will be assigned.

I am able to find examples of class/static methods that do the above however I am unable to figure out how to do this with an instance method. My attempt is below:

class Coordinates
{
    private int iD = 0;
    private float xCoordinate;
    private float yCoordinate;

    public Coordinates()
    {
        //Asks for input and assigns it to the two variables below
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Please enter the X Coordinate followed by the return key");
        xCoordinate = keyboard.nextDouble();
        System.out.println("Please enter the Y Coordinate followed by the return key");
        yCoordinate = keyboard.nextDouble();

        iD++;
    }

    public getiD()
    {
        return iD;
    }

}

My main method is as follows:

public class Machine
{
    public static void main(String[] args)
    {
        Coordinates c1 = new Coordiantes();
        Coordinates c2 = new Coordiantes();
        Coordinates c3 = new Coordiantes();

        System.out.println("ID: " + c1.getID());
        System.out.println("ID: " + c2.getID());
        System.out.println("ID: " + c3.getID());


    }
}

Please note I have not included my entire code for the sake of simplicity and easiness to follow. I hope I have added enough.

I also don't want to use java.util.UUID.

Answer

CoderBC picture CoderBC · Feb 17, 2016

The problem right now is that your 'id' is an instance variable, meaning it belong to the objects you create. Think of it that every time you create an object a new and fresh copy of your instance variable is made. So every time you create an object the id is first set to 0, then post incremented once (thus all objects have an id=0).

If you want to create a variable that, say, automatically counts all objects you have created in a class or has the id, you need to make a class variable. These variable belong to all the objects you create from a class and the keyword used for that is 'static'.

Note: I have used a static variable BUT not a static method. If you don't want to use static at all, it is a different question

class Coordinates
{
private static int count = 0;
private int id=0;
private float xCoordinate;
private float yCoordinate;

public Coordinates()
{
    //Asks for input and assigns it to the two variables below
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Please enter the X Coordinate followed by the return key");
    xCoordinate = keyboard.nextDouble();
    System.out.println("Please enter the Y Coordinate followed by the return key");
    yCoordinate = keyboard.nextDouble();

    id=count++;
}

public getiD()
{
    return iD;
}

}

A simple change of keyword will make your program correct. You dont have to do too much complicated stuff.

It is difficult to grasp the concept of class and objects, static and instance variables at first. Let me know if you'd like more explanation :)