zoukankan      html  css  js  c++  java
  • 第二章 第一节 语言基础

    1、注释

      注释指的是一些描述代码的文字。

      我们可以把对代码的各方面描述,都写成代码的注释。注释中经典的内容包括:这段代码是如何工作的、这段代码使用了什么算法、这段代码的执行流程如何,等等。注释不是Java代码的一部分,编译时,编译器会把Java代码翻译成字节码,而注释则会被编译器自动忽略。因此,代码中有没有注释,都不会影响到代码的运行效果。

      但是,注释却是编程中必不可少的内容,有良好的注释,能够极大的增强代码的可读性。也就是说,加上注释的代码更容易让人读懂。

      如果你是一个初学者,一开始可能意识不到注释的意义,然而我们知道,Java代码是给机器看的,同时也是给人看的,事实上,程序员看代码的时间远远超过Java编译器看代码的时间(想象一下你调试和写程序需要多久,而编译器编译程序需要多久)。因此,我们写程序应当注重"可读性",也就是说,我们写的代码应当尽可能让人容易读懂。随着工作量和代码量的增加,越来越多的代码和复杂的业务逻辑会让程序员很难读懂、修改和维护代码。也许有一天,在看到自己写的代码的时候,你也会发出这样的感慨:"咦,这段代码真的是我写的么?我怎么一点都看不懂了"。这时候,注释能够给程序员带来最大的帮助。

      Java中的注释代码从语法上来说主要有三种:单行注释、多行注释、javadoc注释。

    1.1、单行和多行注释 

      单行注释和多行注释,是很多编程语言中常见的注释语法。

      在Java中,单行注释以"//"开头,直到遇到一个换行符为止。以下为合法的单行注释:  

    //这是HelloWorld类
    public class HelloWorld{
        //这是程序的主方法
        public static void main(String[] args){
            System.out.println("Hello World");//打印语句
        }
    }

      在Java中,多行注释以" /* "开头,以" */ "结尾,在/*和*/之间的所有内容,均作为注释。

    //这是HelloWorld类
    public class HelloWorld{
        //这是程序的主方法
        public static void main(String[] args){
            /*
                在程序的主方法中
                这段代码的含义是打印Hello World字符串
            */
            System.out.println("Hello World");
        }
    }

    但是特别注意的是,多行注释中不能嵌套。否则会引起编译错误。

    1.2、javadoc注释

      javadoc注释,是Java中一种比较特殊的注释,这种注释用来生成api文档。

      程序员对外发布Java代码的时候,还应当对外公布这些代码的用法。这样,才能让其他程序员能够更方便的利用已用的代码。在Java中,我们往往使用api文档,来向其他程序员介绍代码的组成和用法。

      java1.8的文档链接如下:http://java.sun.com/javase/8/docs/api/ 。对于程序员来说,如何来生成这样的api文档呢?如果让程序员来直接手工编写,是一件非常麻烦的事情,为此,java提供了一种相对比较简单的机制。

      首先,在代码中,我们可以使用javadoc注释,从语法上说,这种注释由" /** "开头,以" */ "结尾,在" /** "和" */ "之间可以有多行文本,并且与多行注释一样,javadoc也不允许嵌套。这是一种特殊的多行注释,可以在代码中描述类、函数等等。

      然后,在JDK中,有一个javadoc命令,这个命令能够从源文件中获取javadoc注释,并根据javadoc注释,自动生成api文档。代码如下:

    /**
     * 这是对类的描述
     */
    public class HelloWorld{
        /**
         *    这是对主方法的注释
         */
        public static void main(String[] args){
            
            System.out.println("Hello World");
        }
    }

      上述代码,再类和方法前面都加上了javadoc注释。然后,进入命令行。在命令行上输入如下代码:

      javadoc -d doc HelloWorld.java

      javadoc 命令能够根据代码中的javadoc注释生成文档。 "-d 文件夹名" 是javadoc命令的一个选项,这个选项表示的是,生成的文档要放在后面指定的文件夹下,这就表示生成的javadoc 文档要放在doc目录下。javadoc 命令最后一个参数,是一个java源文件的名字,表示要生成哪一个源文件的文档。然后会在当前目录下生成一个doc目录,如下:

    在doc目录里面:

    在生成的一系列文件中,可以用浏览器打开index.html网页,显示如下:

      javadoc 命令自动为我们生成了一个上图显示的文档。上面,我们介绍了如何使用javadoc注释自动生成api文档,关于这种注释的更详细的使用,可以参考 http://java.sun.com/j2se/javadoc/ 。

    1.2、包  package语句 

      随着代码的大量增加,程序员写的.java源文件以及编译产生.class字节码文件会大量的增加。如果任由这种情况发生的话,无论是查询还是管理都会非常的不方便。为了解决这方面的问题,Java提供了"包"来帮助我们组织和管理类。为了方便管理,我们往往会按照某种规则,创建结构合理的文件夹结构,例如,如果有大量的mp3音乐文件,用户可以把这些文件按照歌手、风格、专辑等,来创建相应的文件夹,分门别类的进行管理。

      在java中,为了更好的管理大量的类,引入"包"的概念。

      使用package语句用来将一个特定的类放入包中。要注意的是,如果要使用package语句,则这个语句必须作为.java文件的第一个语句,并写在任何类的外面。代码如下:

    package book.corejava;
    
    public class HelloWorld{
    	public static void main(String[] args){
    		
    		System.out.println("Hello World");
    	}
    }

      上面的这段代码,就把HelloWorld类放在了book.corejava包下。要注意的是,在加包之后,使用HelloWorld类时必须加上包名作为前缀,因此完整的写法应当是:book.corejava.HelloWorld。这种在类名前面加上包名的写法称为类的全限定名。注意:在使用包时,包结构必须硬盘上的文件夹结构相同。

      那么,编译上面的代码就要用如下的命令:

      javac -d . HelloWorld.java

      -d 选项,要求编译器把编译生成的.class文件按照包结构来存放。编译器会按照类的包结构,自动生成对应的目录结构。用法如下:

      javac -d 目标目录 源文件名。其中目标目录指的是:把生成的目录放在哪个目录下作为子目录。例如上面的命令javac -d . HelloWorld.java,这个"."就代表当前目录。结构如下:

      D:

       |--HelloWorld.java

       |--book

        |--corejava

         |--HelloWorld.class

      那么,编译之后,运行上面的代码,用如下的命令:

      java book.corejava.HelloWorld

      运行结果如下:

     特别提醒:执行java命令时,当前路径必须在字节码文件包结构的上层目录下,否则将会出现运行错误,这是因为我们在配置环境变量的时候,将CLASSPATH这个变量的值设置为了"."。也就是说,JVM会到当前目录下去寻找所需要的类文件。 

      使用包的主要目的是为了避免类名冲突,例如,假如有两个程序员不约而同的都使用HelloWorkd作为类名。如果这两个类都不使用包的话,一方面,两个类的类名相同,因此在使用上会产生歧义,另一方面,再把两个程序员写完的.class字节码文件放在一起运行的时候,在同一个文件夹下会有两个同名的字节码文件,从而产生文件冲突。而如果这个两个程序员使用不同的包p1和p2,一方面生成的HelloWorld.class字节码文件一个放在p1目录下,另一个放在p2目录下,不会有文件名的冲突,另一方面,权限定名不同,在使用这个两个类时,一个被称为p1.HellWord,另一个被称为p2.HelloWorld,从而避免了类名的冲突。

      为了保持包名的绝对唯一性,Sun公司建议将公司的Internet网址(必然是唯一的)的逆序作为包名,并在不同的项目中使用不同的子包。例如,假设公司的网址是abc.com,则应当使用com.abc作为包名。

    2、import语句

      把类加上包之后,除了运行时之外,在源代码中使用这个类也必须使用类的权限定名,否则就会编译出错,正确使用如下代码:

    package book.corejava;
    
    public class HelloWorld{
        /** this is main note */
        public static void main(String[] args){
            book.corejava.HelloWorld helloWorld;
            System.out.println("Hello World");
        }
    }

      在这里有个简单写法就是Java为我们提供了import语句。import语句表示导入特定的类,在使用import语句导入一个类之后,使用时就能简单的使用类名了,例如如下代码:

    package book.corejava;
    import book.corejava.HelloWorld;
    
    public class HelloWorld{
        /** this is main note */
        public static void main(String[] args){
            HelloWorld helloWorld;
        }
    }

      在这里你可能体会不到import语句有多大的作用,但是随着代码量的增加,会使程序的冗余代码大大减少,变得相当简洁和清晰。从语法上说,如果要使用import语句,则这个语句必须放在任何类的外部,仅能在package语句之后。

      此外,一个.java文件中可以有多个import语句,用于导入多个类。如果想要一次导入某个包下的所有类,则可以使用*通配符。例如:

      import java.util.*;

      表示导入java.util包内的所有类。也就是说,当我们用到这个包里面任何一个类的时候,都可以省略包名。特别要提醒的是,上述语句并不能导入util包的子包,也就是说,java.util.jar、java.util.logging等包下的类并未导入。

      例如:我们要使用下面这几个类:

      java.util.ArrayList,java.uttil.HashSet,java.util.logging.Logger,下面的代码:

    package book.corejava;
    import java.util.*;
    
    public class HelloWorld{
        public static void main(String[] args){
            ArrayList list;
            HashSet set;
            Logger log;
        }
    }

      由于import java.util.*能够带入java.util.ArrayList和java.util.HashSet类,但不能导入java.util的子包中的类,因此java.util.logging.Logger类并没有导入,编译器找不到这个类,因此编译出错,如图:

      另外,只能用*导入一个包,而不能使用java.*或java.*.*等语法,试图导入所有以java为前缀的包。最后,java.lang包为标准Java库中最常用的包,这个包中的类会在所有java程序中自动被导入,也可以理解为,在所有的.java文件中,import java.lang.*,这个语句都不用写,编译器会自动导入这个包下的类。

      

     

  • 相关阅读:
    MVVM框架-MVVMLight
    WPF多值绑定及多值转换(MultiBinding和IMultiValueConverter)
    WPF使用转换器(Converter)
    WPF绑定功能常用属性介绍
    WPF绑定属性
    Java工作笔记:工作中使用JNA调用C++库的一些细节(转载)
    关于使用sudo命令后找不到JAVA_HOME的问题
    IDEA入门级使用教程
    dubbo协议参考手册(转)
    Javascript 基础夯实 —— 使用 webWorker 实现多线程(转)
  • 原文地址:https://www.cnblogs.com/zhiweijq/p/9860704.html
Copyright © 2011-2022 走看看