Chapter 6. Names
6.2. Names and Identifiers
A name is used to refer to an entity declared in a program.
There are two forms of names: simple names and qualified names.
A simple name is a single identifier.
A qualified name consists of a name, a "." token, and an identifier.
In determining the meaning of a name (§6.5), the context in which the name appears is taken into account. The rules of §6.5 distinguish among contexts where a name must denote (refer to) a package (§6.5.3), a type (§6.5.5), a variable or value in an expression (§6.5.6), or a method (§6.5.7).
Packages and reference types have members which may be accessed by qualified names. As background for the discussion of qualified names and the determination of the meaning of names, see the descriptions of membership in §4.4, §4.5.2, §4.8, §4.9, §7.1, §8.2, §9.2, and §10.7.
Not all identifiers in a program are a part of a name. Identifiers are also used in the following situations:
In declarations (§6.1), where an identifier may occur to specify the name by which the declared entity will be known.
As labels in labeled statements (§14.7) and in
breakandcontinuestatements (§14.15, §14.16) that refer to statement labels.In field access expressions (§15.11), where an identifier occurs after a "
." token to indicate a member of an object that is the value of an expression or the keywordsuperthat appears before the "." token
FieldAccess:
Primary . Identifier
super . Identifier
ClassName . super . Identifier
In some method invocation expressions (§15.12), where an identifier may occur after a "
." token and before a "(" token to indicate a method to be invoked for an object that is the value of an expression or the keywordsuperthat appears before the "." token
MethodInvocation:
MethodName ( ArgumentListopt )
Primary . NonWildTypeArgumentsopt Identifier ( ArgumentListopt )
super . NonWildTypeArgumentsopt Identifier ( ArgumentListopt )
ClassName . super . NonWildTypeArgumentsopt Identifier ( ArgumentListopt )
TypeName . NonWildTypeArguments Identifier ( ArgumentListopt )
In qualified class instance creation expressions (§15.9), where an identifier occurs immediately to the right of the leftmost
newtoken to indicate a type that must be a member of the compile-time type of the primary expression preceding the "." preceding the leftmostnewtoken.
ClassInstanceCreationExpression:
new TypeArgumentsopt TypeDeclSpecifier TypeArgumentsOrDiamondopt
( ArgumentListopt ) ClassBodyopt
Primary . new TypeArgumentsopt Identifier TypeArgumentsOrDiamondopt
( ArgumentListopt ) ClassBodyopt
TypeArgumentsOrDiamond:
TypeArguments
<>
ArgumentList:
Expression
ArgumentList , Expression
Names are used to refer to entities declared in a program.
A declared entity (§6.1) is a
(1)package
(2)class type (normal or enum)
(3)interface type (normal or annotation type)
(4)member (class, interface, field, or method) of a reference type
(5)type parameter (of a class, interface, method or constructor)
(6)parameter (to a method, constructor, or exception handler),
(7)local variable
6.5. Determining the Meaning of a Name
The meaning of a name depends on the context in which it is used. The determination of the meaning of a name requires three steps:
First, context causes a name syntactically to fall into one of six categories: PackageName, TypeName, ExpressionName, MethodName, PackageOrTypeName, or AmbiguousName.
Second, a name that is initially classified by its context as an AmbiguousName or as a PackageOrTypeName is then reclassified to be a PackageName, TypeName, or ExpressionName.
Third, the resulting category then dictates the final determination of the meaning of the name (or a compile-time error if the name has no meaning).
PackageName:
Identifier
PackageName . Identifier
TypeName:
Identifier
PackageOrTypeName . Identifier
ExpressionName:
Identifier
AmbiguousName . Identifier
MethodName:
Identifier
AmbiguousName . Identifier
PackageOrTypeName:
Identifier
PackageOrTypeName . Identifier
AmbiguousName:
Identifier
AmbiguousName . Identifier
6.5.1. Syntactic Classification of a Name According to Context
1、A name is syntactically classified as a PackageName in these contexts:
(1)In a package declaration (§7.4)
PackageDeclaration:
Annotationsopt package PackageName ;
(2)To the left of the "." in a qualified PackageName
2、A name is syntactically classified as a TypeName in these contexts:
(1)In a single-type-import declaration (§7.5.1)
SingleTypeImportDeclaration:
import TypeName ;
(2)To the left of the "." in a single-static-import declaration (§7.5.3)
SingleStaticImportDeclaration:
import static TypeName . Identifier ;
(3)To the left of the "." in a static-import-on-demand declaration (§7.5.4)
StaticImportOnDemandDeclaration:
import static TypeName . * ;
(4)To the left of the "<" in a parameterized type (§4.5)
(5)In a type argument list (§4.5.1) of a parameterized type
TypeArguments:
< TypeArgumentList >
TypeArgumentList:
TypeArgument
TypeArgumentList , TypeArgument
TypeArgument:
ReferenceType
Wildcard
Wildcard:
? WildcardBoundsopt
WildcardBounds:
extends ReferenceType
super ReferenceType
(6)In an explicit type argument list in a method or constructor invocation
(7)In an extends clause in a type variable declaration (§8.1.2)
(8)In an extends clause of a wildcard type argument (§4.5.1)
(9)In a super clause of a wildcard type argument (§4.5.1)
(10)In an extends clause in a class declaration (§8.1.4)
(11)In an implements clause in a class declaration (§8.1.5)
(12)In an extends clause in an interface declaration (§9.1.3)
(13)After the "@" sign in an annotation (§9.7)
(14)As a Type (or the part of a Type that remains after all毕竟,终究 brackets are deleted) in any of the following contexts:
As the type of a formal parameter of a method or constructor (§8.4.1, §8.8.1, §9.4)
As the type of an exception that can be thrown by a method or constructor (§8.4.6, §8.8.5, §9.4)
As the type of a local variable (§14.4)
As the type of an exception parameter in a
catchclause of atrystatement (§14.20)As the type in a class literal (§15.8.2)
As the qualifying type of a qualified
thisexpression (§15.8.4).As the class type which is to be instantiated in an unqualified class instance creation expression (§15.9)
As the direct superclass or direct superinterface of an anonymous class (§15.9.5) which is to be instantiated in an unqualified class instance creation expression (§15.9)
As the element type of an array to be created in an array creation expression (§15.10)
As the qualifying type of field access using the keyword
super(§15.11.2)As the qualifying type of a method invocation using the keyword
super(§15.12)As the type mentioned in the cast operator of a cast expression (§15.16)
As the type that follows the
instanceofrelational operator (§15.20.2)
3、A name is syntactically classified as an ExpressionName in these contexts:
(1)As the qualifying expression in a qualified superclass constructor invocation (§8.8.7.1)
(2)As the qualifying expression in a qualified class instance creation expression (§15.9)
(3)As the array reference expression in an array access expression (§15.13)
(4)As a PostfixExpression (§15.14)
(5)As the left-hand operand of an assignment operator (§15.26)
4、A name is syntactically classified as a MethodName in these contexts:
(1)Before the "(" in a method invocation expression (§15.12)
(2)To the left of the "=" sign in an annotation's element value pair (§9.7)
5、A name is syntactically classified as a PackageOrTypeName in these contexts:
(1)To the left of the "." in a qualified TypeName
(2)In a type-import-on-demand declaration (§7.5.2)
6、A name is syntactically classified as an AmbiguousName in these contexts:
(1)To the left of the "." in a qualified ExpressionName
(2)To the left of the "." in a qualified MethodName
(3)To the left of the "." in a qualified AmbiguousName
(4)In the default value clause of an annotation type element declaration (§9.6)
(5)To the right of an "=" in an an element value pair (§9.7)
Chapter 6. Names的更多相关文章
- python爬取365好书中小说
需要转载的小伙伴转载后请注明转载的地址 需要用到的库 from bs4 import BeautifulSoup import requests import time 365好书链接:http:// ...
- python爬取小说详解(一)
整理思路: 首先观察我们要爬取的页面信息.如下: 自此我们获得信息有如下: ♦1.小说名称链接小说内容的一个url,url的形式是:http://www.365haoshu.com/Book/Cha ...
- Javascript——概述 && 继承 && 复用 && 私有成员 && 构造函数
原文链接:A re-introduction to JavaScript (JS tutorial) Why a re-introduction? Because JavaScript is noto ...
- 关于protected在子类创建父类对象无法访问父类protected方法或成员
子类(父类的外部包)中访问父类的protetcted属性或者方法,是不可以通过创建父类对象调用的.注意:此处不讨论同包下的父类子类,因为同包下所有类都可访问protected属性或者方法. 请参见Ja ...
- Clean Code – Chapter 2: Meaningful Names
Use Intention-Revealing Names The name should tell you why it exists, what it does, and how it is us ...
- Structure And Representation Of MIB Object Names - SNMP Tutorial
30.8 Structure And Representation Of MIB Object Names We said that ASN.1 specifies how to represent ...
- locations in main memory to be referenced by descriptive names rather than by numeric addresses
Computer Science An Overview _J. Glenn Brookshear _11th Edition Chapter 6 Programming Languages As s ...
- Think Python - Chapter 17 - Classes and methods
17.1 Object-oriented featuresPython is an object-oriented programming language, which means that it ...
- JavaScript- The Good Parts CHAPTER 2
I know it well:I read it in the grammar long ago.—William Shakespeare, The Tragedy(悲剧:灾难:惨案) of Titu ...
随机推荐
- Python WebDriver 文件上传(二)
今天补充一种文件上传的方法 主要是因为工作中使用SendKeys方法不稳定,具体方法见: Python WebDriver 文件上传(一) 这种方法直接通过命令行执行脚本时没有问题,可以成功上传,但是 ...
- Android-工作总结-LX-2018-08-20-setHint
问题的因素: 调试了一下午,我一直是以为是数据没有传递过来,然后一直在数据获取环节检查在检查,数据跟踪在跟踪,最后发现数据获取是OK
- oracle 11gr2 2.04 em 更改 hostname 后无需重建资料库的方法
1) 备份删除$ORACKE_HOME/ xxxx-sid 的EM目录:复制要创建的xxx-sid EM 名称目录: 备份删除$ORACKE_HOME/oc4j/j2ee/ xxxx-sid 的EM目 ...
- ES6摘抄
1.函数可选参数function log(x, y = 'World') {} 只能作为尾参数使用,因为如果不是尾参数还是要输入的.2.函数参数默认值与解构赋值结合使用.(注意对象冒号解构等号)fun ...
- WP8.1StoreApp(WP8.1RT)---第三方启动
8.1的协议和wp8是相互通用的 被启动: 相比较wp8而言,基本变化不大,但添加方式更直观了 1:打开Package.appxmanifest 2:切换到"声明"选项卡 3:左侧 ...
- 创建可复用的自定义 ASP.NET MVC Helpers
通常,在ASP.NET MVC项目中App_Code目录下新建.cshtml编写类似下方的代码就能创建自定义的MVC Helper了, 假设文件名为StrHelper.cshtml,那么在别的视图中的 ...
- Android Bug BaseExpandableListAdapter, getChildView
@Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastC ...
- 管道/FIFO注意事项
管道 1. 其本质是一个伪文件(实为内核缓冲区) 2. 由两个文件描述符引用,一个表示读端,一个表示写端. 3. 规定数据从管道的写端流入管道,从读端流出. 管道的原理: 管道实为内核使用环形队列机制 ...
- sgi stl内存池实现------源码加翻译
class __default_alloc_template { enum { unit = 8 };//分配单位 后面直接用8代替 enum { max_bytes = 128 };//最大分配字节 ...
- django系列3.3--view视图函数, render, reverse(未完待续)
1.view视图函数 urls分发之后所用到的处理函数 2.render 用于渲染页面 在views.py中常用 from django.shortcuts import render, HttpRe ...