出自《java puzzle》
下面的程序在相同的范围内具有两个名字相同的声明,并且没有任何明显的方式可以在它们二者之间做选择。这个程序会打印Black吗?它会打印White吗?甚至,它是合法的吗?
public class ShadesOfGray {
public static void main(String[] args){
System.out.println(X.Y.Z);
}
}
class X {
static class Y {
static String Z = "Black";
}
static C Y = new C();
}
class C {
String Z = "White";
}
没有任何显而易见的方法可以确定该程序应该打印Black还是White。编译器通常会拒绝模棱两可的程序,而这个程序看起来肯定是模棱两可的。因此,它似乎应该是非法的。如果你试着运行它,就会发现它是合法的,并且会打印出White。你怎样才能事先了解这一切呢?
可以证明,在这样的上下文环境中,有一条规则决定着程序的行为,即当一个变量和一个类型具有相同的名字,并且它们位于相同的作用域时,变量名具有优先权[JLS 6.5.2]。变量名将遮掩(obscure)类型名[JLS 6.3.2]。相似地,变量名和类型名可以遮掩包名。这条规则真的是相当地晦涩,任何依赖于它的程序都极有可能使它的读者晕头转向。
幸运的是,遵守标准的Java命名习惯的程序继续从来都不会遇上这个问题。类应该以一个大写字母开头,以MixedCase的形式书写;变量应该以一个小写字母开头,以mixedCase的形式书写;而常量应该以一个大写字母开头,以ALL_CAPS的方式书写。单个的大写字母只能用于类型参数,就像在泛型接口Map<K,V>中那样。包名应该以lower.case的方式命名[JLS 6.8]。
为了避免常量名与类名的冲突,在类名中应该将首字母缩拼词当作普通的词处理[EJ Item 38]。例如,一个表示全局唯一标识符的类应该被命名为Uuid,而不是UUID,尽管其首字母缩拼词通常被写为UUID。(Java平台库就违反了这项建议,因为它具有UUID、URL和URI这样的类名。)为了避免变量名与包名的冲突,请不要使用顶层的包名或领域名作为变量的名字,特别是不要将一个变量命名为com、org、net、edu、java或javax。
要想移除ShadesOfGray这个程序中的所有不明确性,只需以遵守命名习惯的方式对其重写即可。很明显,下面的程序将打印Black。作为一种附加的好处,当你大声朗读这个程序时,听起来还最初的那个程序是完全一样的。
public class ShadesOfGray {
public static void main(String[ ] args){
System.out.println(Ex.Why.Z);
}
}
class Ex {
static class Why {
static String Z = "Black";
}
static See y = new See();
}
class See {
String Z = "White";
}
总之,应该遵守标准的命名习惯以避免不同的命名空间之间的冲突,还有一个原因就是如果你违反这些习惯,那么你的程序将让人难以辨认。同样,为了避免变量名与通用的顶层包名相冲突,请使用MixedCase风格的类名,即使其名字是首字母缩拼词也应如此。通过遵守这些规则,你就可以确保你的程序永远不会遮掩类名或包名。再次说明一下,这里列举的仍然是你应该在覆写之外的情况中避免名字重用的一个实例。对语言设计者来说,应该考虑去消除遮掩的可能性。C#是通过将域和嵌套类置于相同的命名空间来实现这一点的。
分享到:
相关推荐
这是一套灰色阴影设计的,简洁扁平化通用商务PPT模板,共25页。第一PPT模板网提供简洁幻灯片模板免费下载; 关键词:灰色通用商务PPT模板,动态简洁PowerPoint模板,灰色投影幻灯片背景图片,红色灰色搭配扁平化PPT...
该文档为灰色阴影系统图标下载,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
这是一套灰色阴影设计的,简洁扁平化通用商务PPT模板,共25页。第一PPT模板网提供简洁幻灯片模板免费下载; 关键词:灰色通用商务PPT模板,动态简洁PowerPoint模板,灰色投影幻灯片背景图片,红色灰色搭配扁平化PPT...
实验3 在现有CSS的基础上,设计一种可移动缩放的表单,该表单仅使用灰色阴影作为输入。 允许大量填充并在代码中使用三个字体系列
较亮的灰色阴影中存在明显的误差,并且大多数颜色无法正确显示。另一方面,伽玛遵循sRGB目标曲线,并且只显示了一些较暗的场景,细节还是不够清晰和层次,经过专业的校调后,颜色更出色,任何颜色或白平衡均无明显...
灰色高斯背景大图展示软件类模板_灰色 简洁 阴影 大气 漂亮 精品 幻灯 大图 软件 企业 html 质感.zip灰色高斯背景大图展示软件类模板_灰色 简洁 阴影 大气 漂亮 精品 幻灯 大图 软件 企业 html 质感.zip
阴影地貌地图以灰色阴影单色描绘,覆盖边界线,由自然地球制成。 大小:375 MB 缩放级别:0 到 7 此底图可用作地理数据图的背景,使用 geobubble 等功能创建。 有关访问底图的更多详细信息,请访问: ...
灰色高斯背景大图展示软件类模板_灰色 简洁 阴影 大气 漂亮 精品 幻灯 大图 软件 企业 html 质感.rar
灰色高斯背景大图展示软件类模板_灰色 简洁 阴影 大气 漂亮 精品 幻灯 大图 软件 企业 html 质感_html网.rar
PHP网站模板,网站源码,带PHP后台:灰色高斯背景大图展示软件类模板_灰色 简洁 阴影 大气 漂亮 精品 幻.zip
灰色阴影 灰色阴影是具有人体工程学对比的扁平深色GTK主题。 它支持Gnome , Cinnamon , Xfce4 , Mate和Openbox 。 还包括针对Firefox , Thunderbird和Inkscape的主题自定义。 灰色阴影有8种颜色可供选择: 灰色...
当所有三种成分值相等时,产生灰色阴影。 当所有成分的值均为 255 时,结果是纯白色;当该值为 0 时,结果是纯黑色。 应用 目前的显示器大都是采用了RGB颜色标准,在显示器上,是通过电子枪打在屏幕的红、绿...
数字半色调是将连续色调图像转换为严格的黑白图像的过程,这样,当人类视觉系统查看时,该图案会产生一种连续灰色阴影的错觉。 通过半色调创建的二进制图像用于二进制显示设备,例如桌面喷墨打印机。 在这个程序中...
:thinking_face: 在设计过程中,我们经常发现自己最终得到五十种不同的灰色阴影(当然还有其他颜色)。 有时,我们会在设计中迷失自我,而无法跟踪我们使用过的所有颜色。 但这在您必须将其移交给开发团队时并不...
蓝绿色简约长阴影模板-绿黑浅灰色-PPT模板.pptx 汽车交通 PPT模版
介绍这是一个用Haskell编写的程序,该程序将加载图像,并使用特殊公式将图像转换为ASCII艺术作品,以使其看起来与原始图像极为相似。... 在这种情况下, -+*将用于3种灰色阴影... 75%,50%和25%。 我
PPT模板封中间放置灰色阴影效果的矩形卡片背景图片。中间填写个人竞聘PPT标题。底部放置蓝色竖条装饰。界面风格简洁商务。 PowerPoint模板内容页,由20张蓝色灰色配色的幻灯片图表,搭配PPT文案排版。另外使用了职场...
PostCSS灰色阴影 插件,用于将灰度颜色替换为所提供的一组灰色中最接近的一种。 它有助于使CSS更加符合设计准则。 . foo { color : # ACACAC ; } . foo { color : # BBBBBB ; } 安装 $ npm install postcss-...