|
|
||||
|
||||
|
|
|
|||
|
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..." |
|
|||
|
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 esosman@ieee-dot-org.invalid |
|
|||
|
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. |
|
|||
|
On Fri, 13 Jul 2012 07:18:37 -0700 (PDT), bob smith
<bob@coolfone.comze.com> 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 |
|
|||
|
markspace wrote:
> bob smith wrote: > > Is it possible to do this in Java? > > > > 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 |
|
|||
|
Eric Sosman wrote:
> markspace wrote: > > bob smith wrote: > >> Is it possible to do this in Java? > >> > >> throw null; > > > > > > Yes. JLS: > > > > <http://docs.oracle.com/javase/specs/...#jls-14.18> > > > > > > "throw Expression ; > > > > The Expression in a throw statement must denote either 1) a variableor > > 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) 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 |
|
|||
|
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. |
|
|||
|
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. |
|
|||
|
On 13/07/2012 21:09, Roedy Green allegedly wrote:
> On Fri, 13 Jul 2012 07:18:37 -0700 (PDT), bob smith > <bob@coolfone.comze.com> 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. |
|
|||
|
On Fri, 13 Jul 2012 23:06:36 +0200, Daniele Futtorovic
<da.futt.news@laposte-dot-net.invalid> 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 |
|
|
![]() |
| Thread Tools | |
| Display Modes | |
|
|