`
dandy
  • 浏览: 67296 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

灰色的阴影

    博客分类:
  • java
阅读更多
出自《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#是通过将域和嵌套类置于相同的命名空间来实现这一点的。
2
0
分享到:
评论

相关推荐

    灰色阴影设计的简洁扁平化通用商务PPT模板.zip

    这是一套灰色阴影设计的,简洁扁平化通用商务PPT模板,共25页。第一PPT模板网提供简洁幻灯片模板免费下载; 关键词:灰色通用商务PPT模板,动态简洁PowerPoint模板,灰色投影幻灯片背景图片,红色灰色搭配扁平化PPT...

    灰色阴影系统图标下载

    【标题】"灰色阴影系统图标下载"所涉及的知识点主要集中在图标设计、系统图标的理解和应用上。在软件开发和用户界面设计中,图标扮演着至关重要的角色,它们是用户与系统交互的主要视觉元素,而灰色阴影风格的图标则...

    用CSS为表格添加阴影效果.rar

    这段代码将添加一个向右下角偏移2像素,模糊半径为5像素的灰色阴影。`rgba(0, 0, 0, 0.3)` 表示黑色,透明度为30%。 然而,为表格添加阴影时,需要考虑到浏览器兼容性和表格的复杂性。有时,表格内的边框和单元格...

    lab3:在现有CSS的基础上,设计一种可移动缩放的表单,该表单仅使用灰色阴影作为输入。 允许大量填充并在代码中使用三个字体系列

    在本实验中,我们将探索如何使用CSS来创建一个可移动、可缩放的表单,同时保持简洁的设计风格,仅使用灰色阴影作为输入效果,并在布局中应用多种字体系列。这个任务旨在提升我们对CSS布局、样式控制以及交互性设计的...

    灰色阴影设计的简洁扁平化通用商务PPT模板

    这是一套灰色阴影设计的,简洁扁平化通用商务PPT模板,共25页。第一PPT模板网提供简洁幻灯片模板免费下载; 关键词:灰色通用商务PPT模板,动态简洁PowerPoint模板,灰色投影幻灯片背景图片,红色灰色搭配扁平化PPT...

    模拟阴影效果纯CSS圆角框架

    例如,以下代码将创建一个向右下角偏移5像素,模糊半径为10像素的灰色阴影: ```css element { box-shadow: 5px 5px 10px gray; } ``` 然而,早期版本的IE(低于IE9)不支持box-shadow属性,因此需要使用其他方法...

    第42文章 文字阴影与自动换行

    上述代码将为`&lt;h1&gt;`元素的文字添加一个向右下偏移2像素,模糊半径为3像素的灰色阴影。 接着,我们来看**自动换行(word-wrap)**。在网页布局中,有时我们希望长单词或URL能在容器内自动换行,以防止内容溢出。CSS的...

    jQuery+CSS利用阴影实现的超酷3D按钮和文字特效.zip

    `会为元素添加一个向下和向右偏移的灰色阴影,`text-shadow`类似,但作用于文本。 3. **CSS3变换(Transforms)**:CSS3的transform属性允许我们对元素进行2D或3D变换,如旋转、缩放、移动等。在3D按钮中,`...

    Dell S2721DGF ICC配置 文件

    较亮的灰色阴影中存在明显的误差,并且大多数颜色无法正确显示。另一方面,伽玛遵循sRGB目标曲线,并且只显示了一些较暗的场景,细节还是不够清晰和层次,经过专业的校调后,颜色更出色,任何颜色或白平衡均无明显...

    c# 绘制图片阴影 可以给图片绘制阴影

    2. **阴影颜色和模糊**:定义阴影的颜色,如灰色或黑色,并根据需要设置模糊程度。模糊可以通过在图像周围多次画出逐渐透明的边缘来实现。 3. **阴影的偏移**:为了产生阴影效果,需要将阴影图像在X和Y轴上偏移一定...

    塌鼻子怎么化妆图解参考.doc

    - 中间部分制造棕色或灰色阴影,用浓妆遮盖,但保持均匀自然。 7. **鼻子横向宽大的处理**: - 使用比肤色更深的颜色,如褐色或淡黄色的眼影,沿着鼻子涂下至鼻翼。 - 使用柔和的腮红或具有光亮感的阴影化妆品,...

    高胜算通达信指标公式源码.pdf

    - 当股价运行在灰色阴影区域内,意味着市场风险较高,投资者应清仓休息,等待更好的买入时机。 5. **长线投资技巧**: - 长线投资者应关注日K线、周K线或月K线的买卖信号,这些信号滞后但更可靠,能确保在上升...

    灰色高斯背景大图展示软件类模板_灰色 简洁 阴影 大气 漂亮 精品 幻灯 大图 软件 企业 html 质感.zip

    灰色高斯背景大图展示软件类模板_灰色 简洁 阴影 大气 漂亮 精品 幻灯 大图 软件 企业 html 质感.zip灰色高斯背景大图展示软件类模板_灰色 简洁 阴影 大气 漂亮 精品 幻灯 大图 软件 企业 html 质感.zip

    渐进式多尺度特征级联融合颜色恒常性算法.docx

    基于统计学的算法主要包括灰色世界法、灰色阴影法、灰色边缘法等,这类算法的运算速度快,但对于不同的场景,这类算法具有局限性。 基于学习的颜色恒常性算法可以分为基于手工提取特征的传统学习方法和基于深度学习...

    Qt提示框淡出、飞出、缩小等关闭窗口动画

    以上代码创建了一个模糊半径为10像素,垂直偏移为3像素的灰色阴影。 通过结合这些技术,你不仅可以创建出具有视觉吸引力的提示框,还可以根据项目需求定制各种动态效果,提升用户界面的交互性和美观度。在实际开发...

    HSV.rar_HSV _HSV 阴影检测_HSV空间阴影_hsv阴影_阴影

    饱和度越低,颜色越接近灰色。 **明度(Value)**又称为亮度,表示颜色的深浅或明暗程度。明度值越高,颜色越亮;反之,越暗。 在"HSV阴影检测"中,HSV模型的优势在于其能有效区分不同光照条件下的颜色。阴影通常...

    MATLAB 底图数据 - grayterrain:用于地理可视化的灰色地形底图数据-matlab开发

    阴影地貌地图以灰色阴影单色描绘,覆盖边界线,由自然地球制成。 大小:375 MB 缩放级别:0 到 7 此底图可用作地理数据图的背景,使用 geobubble 等功能创建。 有关访问底图的更多详细信息,请访问: ...

    QT QLabel字体阴影实现源码

    在这个例子中,我们首先设置了一个灰色的阴影颜色和1像素的宽度。然后,通过translate()方法调整画布的位置,使得文本向右下角偏移了阴影的偏移量(3, 3),从而在原始位置的偏移处绘制阴影文本。最后,我们恢复画布...

    HTML5+CSS3网页设计-第六章 盒子模型.pptx

    例如,一个向右下角偏移5px,模糊半径为3px的灰色阴影: ```css element { box-shadow: 5px 5px 3px gray; } ``` 回顾与作业点评部分提到,使用CSS设置背景图像时,通常会设置`background-image`(背景图像)和`...

Global site tag (gtag.js) - Google Analytics