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


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

Re: trigger static init

From Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at>
Newsgroups comp.lang.java.programmer
Subject Re: trigger static init
Date 2012-04-11 15:30 +0000
Organization A noiseless patient Spider
Message-ID <slrnjob8s8.kvi.avl@gamma.logic.tuwien.ac.at> (permalink)
References <5605o7di8le7conanmf0g70p1ltipeqct4@4ax.com> <m2zkalqs1m.fsf@ipa.eternal-september.org> <17423607.56.1333992983521.JavaMail.geo-discussion-forums@pbkr6> <slrnjoavkt.kvi.avl@gamma.logic.tuwien.ac.at> <k7SdnU0xr8MbEhjSnZ2dnUVZ_j2dnZ2d@earthlink.com>

Show all headers | View raw


Patricia Shanahan <pats@acm.org> wrote:
> On 4/11/2012 5:52 AM, Andreas Leitgeb wrote:
>>    T is a top-level class, and an assert statement (§14.10) lexically
>>            nested within T is executed.
>> Btw., I don't understand the point about assert. If the assert is
>> lexically nested in T and gets executed, then I'd have naively thought,
>> that one of the first two points would necessarily have happened,
>> anyway, before the assert could be reached. What am I missing here?
> Suppose S is a static class defined in T. I interpreted that as meaning
> that executing an assert in S would trigger initialization of T.
> Or suppose S is non-static, but the assert is in its static code.

I don't yet get it.

=== Main.java ===
public class Main {
    public static void main(String[] args) {
        Object foo = new Outer.Inner();
    }
}
class Outer {
    static {
        System.out.println("Outer init");
    }
    public static class Inner {
        static {
            System.out.println("Inner init1");
            assert 1==1 : "oups!";
            System.out.println("Inner init2");
        }
    }
}
=== call ===
$ java -ea Other  ;# ditto without the -ea
Inner init1
Inner init2
$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode)
$ 
=== end of SSCCE ===

So, it *is* possible to run code "lexically included in Outer"
without Outer having been initialized first (which I had wrongly
believed to be impossible), but assert itself doesn't seem to
have the specified effect.  I also read §14.10, but that just
affirms, that (in order to determine the Assertion-flag for the
toplevel class "Outer") "Outer" would be initialized, too.
It doesn't seem to happen, though.

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

trigger static init Roedy Green <see_website@mindprod.com.invalid> - 2012-04-08 23:28 -0700
  Re: trigger static init Jukka Lahtinen <jtfjdehf@hotmail.com.invalid> - 2012-04-09 10:32 +0300
    Re: trigger static init Roedy Green <see_website@mindprod.com.invalid> - 2012-04-09 06:09 -0700
      Re: trigger static init markspace <-@.> - 2012-04-09 09:19 -0700
      Re: trigger static init Lew <lewbloch@gmail.com> - 2012-04-09 10:33 -0700
    Re: trigger static init Lew <lewbloch@gmail.com> - 2012-04-09 10:36 -0700
      Re: trigger static init Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-04-11 12:52 +0000
        Re: trigger static init Patricia Shanahan <pats@acm.org> - 2012-04-11 07:04 -0700
          Re: trigger static init Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-04-11 15:30 +0000
            Re: trigger static init Patricia Shanahan <pats@acm.org> - 2012-04-11 09:32 -0700
              Re: trigger static init Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-04-22 16:09 +0000
          Re: trigger static init Steven Simpson <ss@domain.invalid> - 2012-04-12 07:38 +0100
            Re: trigger static init Patricia Shanahan <pats@acm.org> - 2012-04-12 00:36 -0700
        Re: trigger static init Joshua Cranmer <Pidgeot18@verizon.invalid> - 2012-04-11 09:39 -0500
          Re: trigger static init Andreas Leitgeb <avl@gamma.logic.tuwien.ac.at> - 2012-04-11 14:56 +0000
          Re: trigger static init Lew <noone@lewscanon.com> - 2012-04-11 08:08 -0700
  Re: trigger static init glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2012-04-09 09:18 +0000
    Re: trigger static init Roedy Green <see_website@mindprod.com.invalid> - 2012-04-09 04:57 -0700
    Re: trigger static init Lew <lewbloch@gmail.com> - 2012-04-09 10:31 -0700
  Re: trigger static init Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-04-10 12:22 -0700

csiph-web