Path: csiph.com!usenet.pasdenom.info!news.albasani.net!.POSTED!not-for-mail From: Lew Newsgroups: comp.lang.java.programmer Subject: Re: "static context" Date: Sat, 21 Apr 2012 04:15:09 -0700 Organization: albasani.net Lines: 46 Message-ID: References: <580829.126.1334881065985.JavaMail.geo-discussion-forums@pbcgs4> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: news.albasani.net k1WYbLgBaYQC8efpdHLRJyJyQL0cR7bQR5qJ4FdYp3VgOW6KhzGZUBHQFM+VXR5ktTOQdB4sWyIyised22+xYgdBtA/RARS/d7FHmjFyE2uJTmDp7P2RkJRu00cgcMrM NNTP-Posting-Date: Sat, 21 Apr 2012 11:15:08 +0000 (UTC) Injection-Info: news.albasani.net; logging-data="vj95SkQh/HlaMs6XYbflJi3gIcZXPjZSztczOw6t2EMOBlf7iF/rQUeh1yZmQfGohoSaWFIt8lyu2pGstVgjXj+3p88+I6EGWMcCAEx+idgLDN5iGCIR/nZdV7q/vstR"; mail-complaints-to="abuse@albasani.net" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120329 Thunderbird/11.0.1 In-Reply-To: Cancel-Lock: sha1:CD4XuVcsGUWF7+AJniWQfQaBO2o= Xref: csiph.com comp.lang.java.programmer:13738 On 04/20/2012 09:27 PM, Stefan Ram wrote: > ram@zedat.fu-berlin.de (Stefan Ram) writes: >>>>> java.lang.Thread . dumpStack() java.lang.System.out . print( 2 ) >> A »type name« is a special kind of context, it is a static context. > > JLS 7 defines »static context« in 8.1.3, but the compiler > uses another meaning of »static context«. > > For example, the call »dumpStack()« in > > class A { void m(){ java.lang.Thread.dumpStack(); }} > > is /not/ in a static context according to JLS 7 8.1.3, Incorrect. The statement 'Thread.dumpStack();' is not in a static context. The simple method name 'dumpStack()' is. I see in that is says, "A statement or expression occurs in a static context if and only if the innermost method, constructor, instance initializer, static initializer, field initializer, or explicit constructor invocation statement enclosing the statement or expression is a static method, a static initializer, the variable initializer of a static variable, or an explicit constructor invocation statement (§8.8.7)." There are two contexts operating here. 'dumpStack()' occurs in a static context established by the symbol 'Thread' and the dot. The entire expression, or statement, 'Thread.dumpStack();' [*] occurs in a non-static context established by the opening curly brace of the instance method definition. > but /is/ according to javac. > > One reason for this possibly is that JLS 1 did not yet > define »static context«, so the wording of the compiler > message might predate the first definition of »static > context« in the JLS. [*] Why the heck do you insist on calling out 'java.lang'? It's highly unconventional and not at all idiomatic for Java. -- Lew Honi soit qui mal y pense. http://upload.wikimedia.org/wikipedia/commons/c/cf/Friz.jpg