Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #23666

Re: A small exercise

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)

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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