Hi All, I Got this Question From JTips Mock Exam No#39
The Answer is ofcourse 1. Can any body Plesae explain this. Thanks in Advance. Siva
- Siva<br /> Sun Certified Programmer for the Java™2 Platform
Charlie Swanson
Ranch Hand
Joined: Jan 29, 2001
Posts: 213
posted
0
Boy this was a good one. This is what I understand: 1. New Processor calls the the constructor Processor in line: Processor p = new Processor() 2. Processor() { // System.out.println("Processor this.b " + this.b); System.out.println("Processor constructor Value of b = " + b); } The Processor() constructor is called, and then the super class is called automatically, Process(). 3. In Process() the method methodA is called. MethodA in in Processor is called. I am sure this is done, but I am not sure why. I believe it is because, MethodA in Processor is the active definition of MethodA since it extends Process. Also, factually this.b has a value of 0. I am guessing, but the object has not been fully instantiated at this point so this.b has a value of 0. (Note after the constructor Processor() is executed this.b will have 126.)
4. When methodA completes, Processor() is completed. I hope this helps out. If you find out anything else please let me know.
Chaitali Deshpande
Greenhorn
Joined: Jan 17, 2001
Posts: 26
posted
0
class Process1 { byte x=-1;
Process1() { this.methodA(); }
void methodA() { System.out.println("Value of b is = " + x ); }
public static void main(String [] args) { Process1 p1 = new Process1();//additional line Processor p = new Processor(); } }
class Processor extends Process1 { byte b=126;
Processor() { System.out.println("Value of b = " + b); }
void methodA() { System.out.println("Value of b = " + this.b); } } o/p is value of b=-1 value of b=0// why this value of b=126
now the object Process is instansiated still why do we get b=0 in o/p.
Sivalingam Sivasuthan
Ranch Hand
Joined: Jan 12, 2001
Posts: 75
posted
0
Thanks Charlie Swanson,Chaitali Deshpande For your replys I agree with Charlie Swanson Explanations. To Chaitali Deshpande. I think, Your are getting that -1 is form a separate Instance of Process1. Siva. [This message has been edited by Sivalingam Sivasuthan (edited January 30, 2001).]
Paul Wilson
Greenhorn
Joined: Jan 22, 2001
Posts: 10
posted
0
Originally posted by Charlie Swanson: Boy this was a good one. This is what I understand: 1. New Processor calls the the constructor Processor in line: Processor p = new Processor() ... I hope this helps out. If you find out anything else please let me know.
____________ I posted a similar problem in the Java in General(Advanced) forum. The JLS explains this problem. As I remember it the title of the post is "order of initialization with static, instance initializers" or some such. Look under my name.
Cherry Mathew
Ranch Hand
Joined: Dec 26, 2000
Posts: 159
posted
0
Originally posted by Chaitali Deshpande: class Process1 { byte x=-1;
Process1() { this.methodA(); }
void methodA() { System.out.println("Value of b is = " + x ); }
public static void main(String [] args) { Process1 p1 = new Process1();//additional line Processor p = new Processor(); } }
class Processor extends Process1 { byte b=126;
Processor() { System.out.println("Value of b = " + b); }
void methodA() { System.out.println("Value of b = " + this.b); } } o/p is value of b=-1 value of b=0// why this value of b=126
now the object Process is instansiated still why do we get b=0 in o/p.
Chaitali th eanswer now is for the first object created values is -1 value is 0 value is 126 is correct although i agree is little confusing now read the expalantion carefully An object is created and initialized only after all the constructors of the class hierachy is called in the first case new Process1() s.o.p is called in the subclass itself so it completes execution of super class constructor (in this case Object) and then initialises b to -1 In the second case method call comes from the super class constructor itself and the overridden method of subclass is called.but at this time superclass constructor hasnt finish execution and the variable of subclass is not initialised and has a default value of 0. now u r again using s.o.p in the subclass constructor and now the supercalss constructor is over and variables are initialized Cherry
Chaitali Deshpande
Greenhorn
Joined: Jan 17, 2001
Posts: 26
posted
0
Thanks cherry for ur detailed explanation. I understood.
I agree. Here's the link: http://ej-technologies/jprofiler - if it wasn't for jprofiler, we would need to
run our stuff on 16 servers instead of 3.