`

java beatiful

    博客分类:
  • java
阅读更多


下面的程序用一个方法对字符进行了分类。这个程序会打印出什么呢?
public class Classifier {
    public static void main(String[] args) {
        System.out.println(
            classify('n') + classify('+') + classify('2'));
    }


    static String classify(char ch) {
        if ("0123456789".indexOf(ch) >= 0)
            return "NUMERAL ";
        if ("abcdefghijklmnopqrstuvwxyz".indexOf(ch) >= 0)
            return "LETTER ";
        /* (Operators not supported yet)
        if ("+-*/&|!=" >= 0)
            return "OPERATOR ";
        */
        return "UNKNOWN";
    }
}

如果你猜想该程序将打印LETTER UNKNOWN NUMERAL,那么你就掉进陷阱里面了。这个程序连编译都通不过。让我们再看一看相关的部分,这一次我们用语法高亮显示:
Java代码

   1. if ("abcdefghijklmnopqrstuvwxyz".indexOf(ch) >= 0) 
   2.              return "LETTER "; 
   3.         /* (Operators not supported yet)
   4.         if ("+-*/&|!=" >= 0) 
   5.                  return "OPERATOR "; 
   6.         */ 
   7.         return "UNKNOWN"; 
   8.     } 
   9. } 

if ("abcdefghijklmnopqrstuvwxyz".indexOf(ch) >= 0)
             return "LETTER ";
        /* (Operators not supported yet)
        if ("+-*/&|!=" >= 0)
                 return "OPERATOR ";
        */
        return "UNKNOWN";
    }
}



正如你之所见,注释在包含了字符*/的字符串内部就结束了,结果使得程序在语法上变成非法的了。我们将程序中的一部分注释出来的尝试之所以失败了,是因为字符串字面常量在注释中没有被特殊处理。
更一般地讲,注释内部的文本没有以任何方式进行特殊处理[JLS 3.7]。因此,块注释不能嵌套。请考虑下面的代码段:

Java代码

   1. /* Add the numbers from 1 to n */ 
   2. int sum = 0; 
   3. for (int i = 1; I <= n; i++) 
   4. sum += i; 

/* Add the numbers from 1 to n */
int sum = 0;
for (int i = 1; I <= n; i++)
sum += i;



现在假设我们要将该代码段注释成为一个块注释,我们再次用粗体字突出整个注释:
Java代码

   1. /*
   2. /* Add the numbers from 1 to n */ 
   3. int sum = 0; 
   4. for (int i = 1; I <= n; i++) 
   5. sum += i; 
   6. */ 

/*
/* Add the numbers from 1 to n */
int sum = 0;
for (int i = 1; I <= n; i++)
sum += i;
*/



正如你之所见,我们没有能够将最初的代码段注释掉。好在所产生的代码包含了一个语法错误,因此编译器将会告诉我们代码存在着问题。
你可能偶尔看到过这样的代码段,它被一个布尔表达式为常量false的if语句禁用了:

Java代码

   1. //code commented out with an if statement - doesn't always work! 
   2. if (false) { 
   3.      /* Add the numbers from 1 to n */ 
   4.      int sum = 0; 
   5.      for (int i = 1; i <= n; i++) 
   6.             sum += i; 
   7. } 

//code commented out with an if statement - doesn't always work!
if (false) {
     /* Add the numbers from 1 to n */
     int sum = 0;
     for (int i = 1; i <= n; i++)
            sum += i;
}



语言规范建议将这种方式作为一种条件编译技术[JLS 14.21],但是它不适合用来注释代码。除非要被禁用的代码是一个合法的语句序列,否则就不要使用这项技术。
注释掉一个代码段的最好的方式是使用单行的注释序列。大多数IDE工具都可以自动化这个过程:

Java代码

   1. //code commented out with an if statement - doesn't always work! 
   2. //     /* Add the numbers from 1 to n */ 
   3. //     int sum = 0; 
   4. //     for (int i = 1; i <= n; i++) 
   5. //            sum += i; 

//code commented out with an if statement - doesn't always work!
//     /* Add the numbers from 1 to n */
//     int sum = 0;
//     for (int i = 1; i <= n; i++)
//            sum += i;


总之,块注释不能可靠地注释掉代码段,应该用单行的注释序列来代替。对语言设计者来说,应该注意到可嵌套的块注释并不是一个好主意。他们强制编译器去解析块注释内部的文本,而由此引发的问题比它能够解决的问题还要多。


分享到:
评论

相关推荐

    java-leetcode题解之Beautiful Array.java

    java java_leetcode题解之Beautiful Array.java

    Beautiful Code

    《代码之美》(Beautiful Code) 是一本集合了众多软件开发专家的经验与智慧的书籍,它深入探讨了如何通过精心设计和优雅实现来创造出优秀的代码。这本书的英文版为程序员们提供了一个独特的视角,展示了不同领域的...

    chu1204505056-vue-admin-beautiful-master_java_

    【标题】"chu1204505056-vue-admin-beautiful-master_java_" 指示了一个项目,该项目结合了Java后端技术和基于Vue的前端框架,特别是Vue的两个不同版本——Vue3.x和Vue2.x,分别与Ant Design Vue(antdv)和Element ...

    Effective Java 软件翻译.rar

    java 的相对简单性和大部分的新语言一样,它的简单性,一部分是幻觉,一...Small is beautiful, but simple ain’t easy 。 蓝领不是贬低的意思,主要是 java 诞生之初,James Gosling 希望树立一个 java 门槛低的形象

    猜数字游戏java版

    自己写的一个java的猜数字游戏,跟大家交流学习 这里不能贴图啊,能贴图就beautiful了

    Boss直聘Java爬虫.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    java爬虫登录验证码解析.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    instagram用户信息 照片 视频动态 Java爬虫.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    Java-全国招标网站爬虫.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    java中stringBuilder的用法详解

    Java 中的 StringBuilder 用法详解 Java 中的 StringBuilder 是一个可变的字符串对象,主要用于字符串的操作和修改。下面将详细介绍 StringBuilder 的用法和常用方法。 StringBuilder 的创建 可以使用重载的构造...

    java书籍

    5. **《Beautiful Code》英文版(beautiful-code-en)**:这是一本由多位知名程序员撰写的合集,讨论了如何写出优雅、高效的代码。书中可能包含各种编程语言的实例,但可能特别强调了Java编程中的设计模式、重构、算法...

    stringbuilder用法 java中StringBuilder的⽤法

    在Java编程中,`StringBuilder`类是用来处理字符串的可变对象,相较于`String`类,它的主要优势在于能够在不创建新对象的情况下对字符串进行修改,从而提高了性能,尤其是在需要进行大量字符串操作,如循环连接字符...

    beautiful-java-programming-sample:美丽的Java编程:red_heart:

    美丽的Java编程 要求 1. Java 11 2. Maven 3.x.x 设置 1. Git克隆 git clone ...cd beautiful-java-programming-sample/ mvn clean install 模组 1. 2.

    使用wx-java-miniapp-spring-boot-starter开发的微信小程序演示demo.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    java爬虫,利用代理IP爬取大众点评网站内容.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    qiuxiaotong-vue3.0-AntDesign-master_java_

    综上所述,这个项目是一个基于Vue 3.0和Ant Design Vue的前端管理平台,它对`good_luck/vue-admin-beautiful`进行了二次封装,增强了与Java后端的集成,提供了丰富的业务组件,并且利用Vue 3.0的新特性提升了开发...

    java中stringBuilder的用法.pdf

    Java中的StringBuilder是一个非常重要的类,它位于java.lang包中,被广泛应用于字符串操作中。StringBuilder的主要作用是提供一个可变的字符序列,用以替代不可变的String,以提高性能和效率。当需要频繁修改字符串...

    Android代码-BeautifulApp

    在Android开发领域,"BeautifulApp"是一个以"最美应用"为设计灵感的开源项目,它展示了如何使用现代的Android开发框架和技术来构建一个高质量、优雅的应用程序。该项目遵循Model-View-Presenter(MVP)架构模式,...

Global site tag (gtag.js) - Google Analytics