Go Back   Rhinocerus > Newsgroup > Newsgroup comp.lang.java.* > Newsgroup comp.lang.java.programmer

Reply
 
Thread Tools Display Modes
  #1 (permalink)  
Old 07-13-2012, 02:18 PM
bob smith
Guest
 
Posts: n/a
Default e==null? really?

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.
Reply With Quote
Alt Today
Advertising
 
and become member of Rhinocerus
Standard Sponsored Links

  #2 (permalink)  
Old 07-13-2012, 02:29 PM
markspace
Guest
 
Posts: n/a
Default Re: e==null? really?

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..."


Reply With Quote
  #3 (permalink)  
Old 07-13-2012, 02:48 PM
Eric Sosman
Guest
 
Posts: n/a
Default Re: e==null? really?

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


Reply With Quote
  #4 (permalink)  
Old 07-13-2012, 03:22 PM
markspace
Guest
 
Posts: n/a
Default Re: e==null? really?

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.
Reply With Quote
  #5 (permalink)  
Old 07-13-2012, 04:35 PM
Daniel Pitts
Guest
 
Posts: n/a
Default Re: e==null? really?

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.
Reply With Quote
  #6 (permalink)  
Old 07-13-2012, 07:09 PM
Roedy Green
Guest
 
Posts: n/a
Default Re: e==null? really?

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


Reply With Quote
  #7 (permalink)  
Old 07-13-2012, 08:09 PM
Lew
Guest
 
Posts: n/a
Default Re: e==null? really?

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
Reply With Quote
  #8 (permalink)  
Old 07-13-2012, 08:11 PM
Lew
Guest
 
Posts: n/a
Default Re: e==null? really?

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-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
Reply With Quote
  #9 (permalink)  
Old 07-13-2012, 08:55 PM
Joerg Meier
Guest
 
Posts: n/a
Default Re: e==null? really?

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.
Reply With Quote
  #10 (permalink)  
Old 07-13-2012, 09:01 PM
javax.swing.JSnarker
Guest
 
Posts: n/a
Default Re: e==null? really?

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.


Reply With Quote
  #11 (permalink)  
Old 07-13-2012, 09:06 PM
Daniele Futtorovic
Guest
 
Posts: n/a
Default Re: e==null? really?

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.
Reply With Quote
  #12 (permalink)  
Old 07-14-2012, 01:30 PM
Roedy Green
Guest
 
Posts: n/a
Default Re: e==null? really?

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


Reply With Quote
 
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off




All times are GMT. The time now is 11:29 AM.


Copyright ©2009

LinkBacks Enabled by vBSEO 3.3.0 RC2 © 2009, Crawlability, Inc.