aspose file tools*
The moose likes Beginning Java and the fly likes Returning Objects........... Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Spring in Action this week in the Spring forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Returning Objects..........." Watch "Returning Objects..........." New topic
Author

Returning Objects...........

Steve Jensen
Ranch Hand

Joined: Sep 23, 2002
Posts: 126
below is a small program which i've lifted from a book (Java 2: The Complete reference, by H. Schildt).



The output generated form the program is as follows:-

ob1.a: 2
ob2.a: 12
ob2.a after second increase: 22


:roll:

But i have some queries regarding this.

In the line Test ob1 = new Test(2);

If you follow this, surely the first line of the output should be 12, and not 2, i.e., ob1.a: 12

Just how exactly is this program working??

Sory for asking such an obvious question, but i'm racking my brains over this.

Cheers in advance


John Bonham was stronger, but Keith Moon was faster.
Jayesh Lalwani
Ranch Hand

Joined: Nov 05, 2004
Posts: 502
The new function will internall invoke the constructor of the Test object, and the constructor is setting the instanc variable named 'a'.

If you are still getting confused, try putting System.out messages in the constructor and incrByTen function. That should give you an idea in what order the functions are being called
Steve Jensen
Ranch Hand

Joined: Sep 23, 2002
Posts: 126


Still don't understand why

ob1.a: is 2

Jayesh Lalwani
Ranch Hand

Joined: Nov 05, 2004
Posts: 502
Ok, let's try step by step

Test ob1 = new Test(2);// at this point ob1.a = 2 and ob2 = null

ob2 = ob1.incrByTen(); //this calls the incrByTen function; which boils down to this

Test temp = new Test(ob1.a + 10); // at this point ob1.a = 2 and temp.a = 12
ob2 = temp;//s= ob1.a = 2 and ob2.a = 12


See, incrByTen is not changing the value of a in ob1; it's just creating a new object who's a is 10 more than ob1.a
jefff willis
Ranch Hand

Joined: Sep 29, 2004
Posts: 113

If you follow this, surely the first line of the output should be 12, and not 2, i.e., ob1.a: 12


The reason that it is not 12 is because this method:



Is creating it's own object and return that. It is not returning Ob1 or any member of Ob1, it is simply invoking the incrByTen() method found in the Ob1 object.
Lou Bassett
Greenhorn

Joined: Nov 08, 2004
Posts: 13
The reason a=2 the first time is because when you create the object ("new") you by default call the constructor. Variables inside the constructor live only for the life of the constructor, then they go bye-bye. Also, the variable "a" in the constructor is not the same as the the instance variable "a". A lot of people use "_a" for instance variable names.

When you passed the number (2), you passed it into the constructor and it set it to "2".

When you did "ob2 = ob1.incrByTen();" the value of ob1.a was already 2, so you added 10 to it and it made it 12. Get it?


Lou Bassett
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Returning Objects...........