File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Can not call explicit Constructor Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Can not call explicit Constructor" Watch "Can not call explicit Constructor" New topic
Author

Can not call explicit Constructor

bhadule bhadule
Greenhorn

Joined: Sep 11, 2005
Posts: 10
Hello Ranchies,
can anybody plz explain me why this bellow code is not getting compile?


public class Test19 {
float f;
Test19(){
this(f);
f = 3;
}
Test19(float f){
System.out.println(f);
}
public static void main(String args[]) {
Test19 t = new Test19();
}
}


Regards
Hrushi
vidya sagar
Ranch Hand

Joined: Mar 02, 2005
Posts: 580
Hope this helps

Answer
A Kumar
Ranch Hand

Joined: Jul 04, 2004
Posts: 978
Hi,

Check this out...



Explicit Constructor invocation


[ October 26, 2005: Message edited by: A Kumar ]
bhadule bhadule
Greenhorn

Joined: Sep 11, 2005
Posts: 10
sorry vidya sagar,
my default constructor is calling to the one argument constructor by the this keyword....what's wrong with this?....

Regards
hrushi
bhadule bhadule
Greenhorn

Joined: Sep 11, 2005
Posts: 10
Hi A Kumar,
i read the article and i got the statement...


An explicit constructor invocation statement in a constructor body may not refer to any instance variables or instance methods declared in this class or any superclass, or use this or super in any expression; otherwise, a compile-time error occurs.

but why this is not allowed?
vidya sagar
Ranch Hand

Joined: Mar 02, 2005
Posts: 580
because this has an argument of instance variables

if u replace with some constant it will work
this(1.2f);
Sowjanya Chowdary
Ranch Hand

Joined: Aug 22, 2005
Posts: 35
Originally posted by bhadule bhadule:

An explicit constructor invocation statement in a constructor body may not refer to any instance variables or instance methods declared in this class or any superclass, or use this or super in any expression; otherwise, a compile-time error occurs.

but why this is not allowed?


What is the reason that the instance variables or methods are not allowed in explicit constructor invocation?
Anyhow instance variables will get thier default values.
Please anybody clear.
vidya sagar
Ranch Hand

Joined: Mar 02, 2005
Posts: 580

What is the reason that the instance variables or methods are not allowed in explicit constructor invocation?
Anyhow instance variables will get thier default values.
Please anybody clear.


instance variables get their default values only after its superclass constructor is Executed.
[ October 26, 2005: Message edited by: vidya sagar ]
A Kumar
Ranch Hand

Joined: Jul 04, 2004
Posts: 978
Hi...

And the superclass here happens to be the Object class..

Right?
Balaguru Krish
Greenhorn

Joined: Sep 23, 2005
Posts: 9
Originally posted by bhadule bhadule:
Hello Ranchies,
can anybody plz explain me why this bellow code is not getting compile?


public class Test19 {
float f;
Test19(){
this(f);
f = 3;
}
Test19(float f){
System.out.println(f);
}
public static void main(String args[]) {
Test19 t = new Test19();
}
}


Regards
Hrushi
Balaguru Krish
Greenhorn

Joined: Sep 23, 2005
Posts: 9
Sorry For Previous Reply, I did not add my reply to it.

Problem lies with statement -> this(f);

The problem is we cannot refer to an instance while invoking explicit
constructor.

Hence it must be replaced with this(<constant-value> ;


Originally posted by bhadule bhadule:
Hello Ranchies,
can anybody plz explain me why this bellow code is not getting compile?


public class Test19 {
float f;
Test19(){
this(f);
f = 3;
}
Test19(float f){
System.out.println(f);
}
public static void main(String args[]) {
Test19 t = new Test19();
}
}


Regards
Hrushi
Sowjanya Chowdary
Ranch Hand

Joined: Aug 22, 2005
Posts: 35
Originally posted by vidya sagar:


instance variables get their default values only after its superclass constructor is Executed.

[ October 26, 2005: Message edited by: vidya sagar ]


Oh yes, Thanks Vidya Sagar and Kumar.
A Kumar
Ranch Hand

Joined: Jul 04, 2004
Posts: 978
Hi,

Another thing

about super() and this() ......in inheritance

super() will be put implicitly...before explicit this()..

but explicitly super() and this() cannot go together in a constructor

since both of them have to be the first statement defined in a constructor..

So considering this....when this(f)...has been reached..it should have

already completed the execution of the superclass constructor...

which happens to be Object..here..and f should be having the default value..

according to the above post...

Then why the error? i dont know..

Ofcourse if you go by the JLS...it should throw an error if we pass instance

variables..But still the why remains..

Hope someone provides an answer...

[ October 27, 2005: Message edited by: A Kumar ]
vidya sagar
Ranch Hand

Joined: Mar 02, 2005
Posts: 580

Then why the error? i dont know..


Hi Kumar

When we add this in the constructor(Explicilty),JVM doesnot add
super implicitly in that constructor.

Rather it add super in the other overloaded constructor(in the same class), which we called through this.

Note : Super or this should be first statement in constructor,but both cannot be in one constructor.
A Kumar
Ranch Hand

Joined: Jul 04, 2004
Posts: 978
Hi Vidya...

I got the point you are trying to convey....You are right....

I should have been careful about that...

Thank you

 
jQuery in Action, 2nd edition
 
subject: Can not call explicit Constructor
 
Similar Threads
compiler error?
Constructor
Says cannot reference f before supertype constructor has been called
supertype constructor ??
constructors