Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #23666
| Date | 2013-04-27 09:25 +0100 |
|---|---|
| From | lipska the kat <"nospam at neversurrender dot co dot uk"> |
| Organization | Trollbusters 3 |
| Newsgroups | comp.lang.java.programmer |
| Subject | Re: A small exercise |
| References | <exercise-20130420150736@ram.dialup.fu-berlin.de> <R_2dnU9jtOi9Ie_MnZ2dnUVZ7q-dnZ2d@bt.com> <5172e967$0$32109$14726298@news.sunsite.dk> <LvqdnUgkK5sPJO7MnZ2dnUVZ7oydnZ2d@bt.com> <517b3461$0$32112$14726298@news.sunsite.dk> |
| Message-ID | <2rWdnWTV7bz8FubMnZ2dnUVZ7qGdnZ2d@bt.com> (permalink) |
On 27/04/13 03:13, Arne Vajhøj wrote:
> On 4/21/2013 6:04 AM, lipska the kat wrote:
>> On 20/04/13 20:15, Arne Vajhøj wrote:
>>> On 4/20/2013 12:02 PM, lipska the kat wrote:
>>>> On 20/04/13 14:11, Stefan Ram wrote:
>>>>> Try to predict the behavior of the execution or compilation
>>>>> of the following code!
>>>>>
>>>>> public class Main
>>>>> { final int a; final int b;
>>>>> Main(){ this.a = 0; Main.this.b = 0; }
>>>>> public static void Main( final java.lang.String[] args )
>>>>> { new Main(); }}
>>>>>
>>>>> (I made this observation while programming something else
>>>>> using Oracle JDK 7, but I have not read the JLS about it yet.)
>>>>
>>>> open-jdk6 and open-jdk7
>>>>
>>>> I think that logically, Main.this.b refers to the enclosing *instance*
>>>> which implies that the class has been instantiated, final fields can
>>>> only be initialized once in a constructor so trying to (logically)
>>>> assign a value to a final variable after instantiation is illegal.
>>>>
>>>> I think :-|
>>>>
>>>> If you remove the final modifier from b then the code compiles, but
>>>> then
>>>> you know this already.
>>>
>>> My understanding of the question is that it is why a work but not b
>>> as this and Main.this should be the same.
>>
>> Yes, this is what I understood.
>>
>> I just don't think that >>this<< and >>Main.this<< are logically
>> equivalent.
>>
>> >>this<< refers to the current instance,
>>
>> >>Main.this<< refers to the (logically) enclosing instance which
>> implies that the >>Main.this.b<< assignment occurs after instantiation
>> which would be illegal which is why the compiler complains.
>
> For the given code this and Main.this refer to the same object.
Ah yes, the old 'state the obvious to discredit the poster' technique
... weak (and incorrect, see below).
Instead of making incorrect observations try to come up with
a theory of your own. Here's an expansion of my theory
Java-7-openjdk, Eclipse Juno
The following code snippet gives 2 compile time errors
final int a; final int b;
public Main(){
this.a = 0;
Main.this.b = 0;
}
the errors are,
"the blank final field b may not have been initialized"
and
"the final field Main.b cannot be assigned"
This *implies* to me that this.b and Main.this.b are not *logically
equivalent*, this is what I said, nothing to do with whether
"For the given code this and Main.this refer to the same object." that
is entirely a fabrication of your own confused mind, in any case, I
would never have used the work 'object' in this context, I would use the
word instance, not the same thing at all.
If this and Main.this not equivalent then they must be different, now
all we need to figure out is what the difference is.
I say that the difference is that the construct Main.b *logically*
refers to a concrete instance of Main which implies that Main has been
instantiated which means that you are trying to initialize a blank final
variable outside the class constructor which is illegal.
As usual I'm happy to be proved wrong as it will mean I have learned
something which implies that I don't know everything which I have no
difficulty with.
lipska
--
Lipska the Kat©: Troll hunter, sandbox destroyer
and farscape dreamer of Aeryn Sun
Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Re: A small exercise lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-04-20 17:02 +0100
Re: A small exercise Arne Vajhøj <arne@vajhoej.dk> - 2013-04-20 15:15 -0400
Re: A small exercise lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-04-21 11:04 +0100
Re: A small exercise Arne Vajhøj <arne@vajhoej.dk> - 2013-04-26 22:13 -0400
Re: A small exercise lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-04-27 09:25 +0100
Re: A small exercise Arne Vajhøj <arne@vajhoej.dk> - 2013-04-27 21:58 -0400
Re: A small exercise "Chris Uppal" <chris.uppal@metagnostic.REMOVE-THIS.org> - 2013-04-28 11:34 +0100
Re: A small exercise Martin Gregorie <martin@address-in-sig.invalid> - 2013-04-28 12:17 +0000
Re: A small exercise lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-04-28 14:05 +0100
Re: A small exercise Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-28 16:14 +0300
Re: A small exercise lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-04-28 14:54 +0100
Re: A small exercise Arne Vajhøj <arne@vajhoej.dk> - 2013-04-28 09:57 -0400
Re: A small exercise Arne Vajhøj <arne@vajhoej.dk> - 2013-04-28 10:14 -0400
Re: A small exercise Sven Köhler <remove-sven.koehler@gmail.com> - 2013-04-27 22:28 +0300
Re: A small exercise markspace <markspace@nospam.nospam> - 2013-04-27 13:53 -0700
Re: A small exercise Arne Vajhøj <arne@vajhoej.dk> - 2013-04-27 21:44 -0400
Re: A small exercise lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-04-28 10:37 +0100
csiph-web