e==null? really?

Discussion in 'Java' started by bob smith, Jul 13, 2012.

  1. bob smith

    bob smith Guest

    Is it possible to do this in Java?

    throw null;


    What probably happened if I am looking at code like this:

    } catch (Exception e) {

    and e is null?

    I'm seeing this, and I just don't get it.
    bob smith, Jul 13, 2012
    #1
    1. Advertising

  2. bob smith

    markspace Guest

    On 7/13/2012 7:18 AM, bob smith wrote:
    > Is it possible to do this in Java?
    >
    > throw null;



    Yes. JLS:

    <http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.18>


    "throw Expression ;

    The Expression in a throw statement must denote either 1) a variable or
    value of a reference type which is assignable (§5.2) to the type
    Throwable, or 2) the null reference..."
    markspace, Jul 13, 2012
    #2
    1. Advertising

  3. bob smith

    Eric Sosman Guest

    On 7/13/2012 10:29 AM, markspace wrote:
    > On 7/13/2012 7:18 AM, bob smith wrote:
    >> Is it possible to do this in Java?
    >>
    >> throw null;

    >
    >
    > Yes. JLS:
    >
    > <http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.18>
    >
    >
    > "throw Expression ;
    >
    > The Expression in a throw statement must denote either 1) a variable or
    > value of a reference type which is assignable (§5.2) to the type
    > Throwable, or 2) the null reference..."


    Interesting. Reading onward, though, we find

    "If evaluation of the Expression completes normally,
    producing a null value, then an instance V' of class
    NullPointerException is created and thrown instead of
    null. [...]"

    .... which leaves a bit of a mystery. The O.P.'s example was
    (fleshed out somewhat)

    try {
    throw null;
    } catch (Exception e) {
    // e is null here!
    }

    .... but according to the JLS that shouldn't have happened. Bug?

    --
    Eric Sosman
    d
    Eric Sosman, Jul 13, 2012
    #3
  4. bob smith

    markspace Guest

    On 7/13/2012 7:48 AM, Eric Sosman wrote:

    > Interesting. Reading onward, though, we find



    Thanks for pointing that out. I'd guess there's no bug, just the OP
    having a hard time interpreting his results.
    markspace, Jul 13, 2012
    #4
  5. bob smith

    Daniel Pitts Guest

    On 7/13/12 8:22 AM, markspace wrote:
    > On 7/13/2012 7:48 AM, Eric Sosman wrote:
    >
    >> Interesting. Reading onward, though, we find

    >
    >
    > Thanks for pointing that out. I'd guess there's no bug, just the OP
    > having a hard time interpreting his results.


    Indeed.
    class NullExceptionSSCCE {
    public static void main(String[] str) {
    try {
    throw null;
    } catch (Exception e) {
    System.out.println("e = " + e);
    }
    }
    }

    =====
    e = java.lang.NullPointerException
    =====


    If the OP was correct, it would have printed "e = null"

    Without a real SSCCE from the OP, it's hard to say in what way the
    results were misinterpreted.
    Daniel Pitts, Jul 13, 2012
    #5
  6. bob smith

    Roedy Green Guest

    On Fri, 13 Jul 2012 07:18:37 -0700 (PDT), bob smith
    <> wrote, quoted or indirectly quoted someone
    who said :

    > } catch (Exception e) {
    >
    >and e is null?


    Most likely you are misinterpreting the results. Try tracing the
    program and put a breakpoint inside your catch.
    --
    Roedy Green Canadian Mind Products
    http://mindprod.com
    The greatest shortcoming of the human race is our inability to understand the exponential function.
    ~ Dr. Albert A. Bartlett (born: 1923-03-21 age: 89)
    http://www.youtube.com/watch?v=F-QA2rkpBSY
    Roedy Green, Jul 13, 2012
    #6
  7. bob smith

    Lew Guest

    markspace wrote:
    > bob smith wrote:
    > &gt; Is it possible to do this in Java?
    > &gt;
    > &gt; throw null;
    >
    >
    > Yes. JLS:


    Good place to get the final word, albeit with a bit of effort occasionally.

    > <http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.18>
    >
    >
    > "throw Expression ;
    >
    > The Expression in a throw statement must denote either 1) a variable or
    > value of a reference type which is assignable (§5.2) to the type
    > Throwable, or 2) the null reference..."


    Know. Don't guess. Read the JLS.

    --
    Lew
    Lew, Jul 13, 2012
    #7
  8. bob smith

    Lew Guest

    Eric Sosman wrote:
    > markspace wrote:
    > &gt; bob smith wrote:
    > &gt;&gt; Is it possible to do this in Java?
    > &gt;&gt;
    > &gt;&gt; throw null;
    > &gt;
    > &gt;
    > &gt; Yes. JLS:
    > &gt;
    > &gt; &lt;http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.18&gt;
    > &gt;
    > &gt;
    > &gt; &quot;throw Expression ;
    > &gt;
    > &gt; The Expression in a throw statement must denote either 1) a variableor
    > &gt; value of a reference type which is assignable (§5.2) to the type
    > &gt; Throwable, or 2) the null reference...&quot;
    >
    > Interesting. Reading onward, though, we find
    >
    > &quot;If evaluation of the Expression completes normally,
    > producing a null value, then an instance V' of class
    > NullPointerException is created and thrown instead of
    > null. [...]&quot;
    >
    > ... which leaves a bit of a mystery. The O.P.'s example was
    > (fleshed out somewhat)


    No mystery. The first refers to a compiler rule, the second to a runtime rule.

    > try {
    > throw null;
    > } catch (Exception e) {
    > // e is null here!
    > }
    >
    > ... but according to the JLS that shouldn't have happened. Bug?


    It's no more a bug than that you might get a 'ClassCastException' when you cast
    a value to another type. The compiler allows what the runtime sometimes
    doesn't.

    --
    Lew
    Lew, Jul 13, 2012
    #8
  9. bob smith

    Joerg Meier Guest

    On Fri, 13 Jul 2012 13:11:18 -0700 (PDT), Lew wrote:

    >> try {
    >> throw null;
    >> } catch (Exception e) {
    >> // e is null here!
    >> }


    >> ... but according to the JLS that shouldn't have happened. Bug?

    > It's no more a bug than that you might get a 'ClassCastException' when you cast
    > a value to another type. The compiler allows what the runtime sometimes
    > doesn't.


    And there's really no way around that - Exception e = null; if
    (externalCondition()) e = new Exception(); throw e; - can't very well
    complain about that at compile time for arbitrary definitions of
    externalCondition().

    Liebe Gruesse,
    Joerg

    --
    Ich lese meine Emails nicht, replies to Email bleiben also leider
    ungelesen.
    Joerg Meier, Jul 13, 2012
    #9
  10. On 13/07/2012 4:55 PM, Joerg Meier wrote:
    > On Fri, 13 Jul 2012 13:11:18 -0700 (PDT), Lew wrote:
    >
    >>> try {
    >>> throw null;
    >>> } catch (Exception e) {
    >>> // e is null here!
    >>> }

    >
    >>> ... but according to the JLS that shouldn't have happened. Bug?

    >> It's no more a bug than that you might get a 'ClassCastException' when you cast
    >> a value to another type. The compiler allows what the runtime sometimes
    >> doesn't.

    >
    > And there's really no way around that - Exception e = null; if
    > (externalCondition()) e = new Exception(); throw e; - can't very well
    > complain about that at compile time for arbitrary definitions of
    > externalCondition().


    Well, there is one; "throw e;" *could* have been specified to compile
    into what you presently get by compiling:

    if (e == null)
    throw new NullPointerException();
    else
    throw e;

    --
    public final class JSnarker
    extends JComponent
    A JSnarker is an NNTP-aware component that asynchronously provides
    snarky output when the Ego.needsPuncturing() event is fired in cljp.
    javax.swing.JSnarker, Jul 13, 2012
    #10
  11. On 13/07/2012 21:09, Roedy Green allegedly wrote:
    > On Fri, 13 Jul 2012 07:18:37 -0700 (PDT), bob smith
    > <> wrote, quoted or indirectly quoted someone
    > who said :
    >
    >> } catch (Exception e) {
    >>
    >> and e is null?

    >
    > Most likely you are misinterpreting the results. Try tracing the
    > program and put a breakpoint inside your catch.


    I'd rather say: if there's the slightest whiff of fishiness with what
    your debugger tells you, throw it to the four winds and use logging instead.

    In my observation debuggers are almost as often a source of confusion as
    they are one of clarification. YMMV.

    --
    DF.
    Daniele Futtorovic, Jul 13, 2012
    #11
  12. bob smith

    Roedy Green Guest

    On Fri, 13 Jul 2012 23:06:36 +0200, Daniele Futtorovic
    <> wrote, quoted or indirectly
    quoted someone who said :

    >In my observation debuggers are almost as often a source of confusion as
    >they are one of clarification. YMMV.


    the main thing is to look from a slightly different angle.
    --
    Roedy Green Canadian Mind Products
    http://mindprod.com
    The greatest shortcoming of the human race is our inability to understand the exponential function.
    ~ Dr. Albert A. Bartlett (born: 1923-03-21 age: 89)
    http://www.youtube.com/watch?v=F-QA2rkpBSY
    Roedy Green, Jul 14, 2012
    #12
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Amir
    Replies:
    3
    Views:
    585
  2. Replies:
    5
    Views:
    26,502
    Mike Schilling
    Mar 29, 2006
  3. nc
    Replies:
    1
    Views:
    485
    nice.guy.nige
    Feb 3, 2005
  4. Jiho Han
    Replies:
    13
    Views:
    620
    John Saunders
    Jul 29, 2006
  5. Replies:
    2
    Views:
    327
Loading...

Share This Page