Import语句不仅可以导入类,还增加了导入静态方法和静态域的功能。静态方法的导入如:import static java.lang.System.*;有个导入静态的方法下面关于这个方法的语句就可以这样写:out.pritnln(“Goodybye,World!”); exit(0);
但是虽然可以导入域,但也并不是所有的情况下都要导入方静态方法和域的,因为导入是为了更方便,而静态方法这样的导入不一定能给程序带来一定的方便。但是两种情况下适合导入静态方法和静态域:一在算术函数的时候如 sqrt(pow(x,2)+pow(y,2))比Math.sqrt(Math.pow(x,2)+Math.pow(y,2))要方便得多。就可以使用到导入。
二、笨重的常量的情况下,如:if (d.get(DAY_OF_WEEK)==MONDAY)比if (d.get(Calendar.DAY_OF_WEEK)==Calendar.MONDAY)方便。
前面讲的是,关于要用到一个包的类,要用到导包,下面讲得就是如果要将一个类放入包中,就必须将包的名字放在源文件的开头,包中定义类的代码之前,用法如:
package com.horstmann.corejava
public class Employee{
}
如果没有在源文件中放置package语句,那么这个源文件中的类就被放置在一个默认包中。默认包是一个没有名字的包。如要想编译这个Employee.java
在这样一个目录下-----PackageTest.java
-----PackageTest.class
-----com/
|------horstmann/
|------corejava/
|----Employee.java
|----Employee.class
要想编译这个程序,只需要运行命令:javac PackageTest.java,编译器会自动查找文件com/horstmann/corejava/Employee.java并进行编译。
类存储在文件系统的子目录中,类的路径必须与包名匹配,还可以利用JAR实用程序将类文件添加到归档文件中。
标记为public 的部分可以被任意类使用,标记为private部分只能被定义它们的类使用,如果没有指定pubic 或private,那么这个部分(类,方法,或变量)可以被同一个包中的所有方法访问。没有指定public 或private是指可以被同一包中的所有方法访问。变量必须显式的标记为private,不然将默认为包可见。这样做会破坏封装性。问题主要出于是人们经常忘记键入关键字private,在默认情况下,包不是一个封闭的实体,也就是说,任何人都可以向包中添加更多的类。有敌意或低水平的程序员可能利用包的可见性,添加一些具有修改变量功能的代码。比如如果,在类文件开头加上这样的一句,就可以访问java.awt.内部了。也会容易将其他类浑进去。这里要注意。
JDK中有一个工具,叫做javadoc,它可以源文件生成一个HTML文档,联机API文档就是对标准JAVA类库的源代码运行javadoc生成的。
注释应该旋转在所描述特性的前面,注释以/**开始,*/结束。
每个/** */文档注释在标记之后紧跟着自由格式文本(free-from text)。标记由@开始,如@author或@param。
自由格式文本的第一句应该是一句概要性句子,javadoc实用程序自动地将这些句子抽取出来形成概要页。可以使用HTML修饰符,如用于强调<em></em>,用于设置等宽“打字机”字体的<code></code>,用于着重强调<strong></stong>以及包含图像<img>等。不过一定不要使用<h1></h1>,因为他们会和文档格式产生冲突。类的注释应该在import语句之后,类定义之前。每一个方法注释必须放置在描述的方法之前,当前的方法”param(参数)”部分添加一个条目,这个描述可以占据多行,可以使用HTML标记,一个方法的所有@parm标记必须放在一起。
@return description:向当前方法添加”return”部分:return description这个描述可以跨越多行,并可以使用HTML标记。
@throws class description :标记将添加一个注释。用于表示这个方法有可能抛出异常。
域注释:只需要对公有域(通常指的是静态常量建立文档)如:
/**
The “Hearts” card suit
*/
通用注释(通用注释可以用到类文档注释中)@author name:标记产生一个”author”条目,可以使用多个@author标记,每个@author标记对应一名作者。
@version text产生一个”version”条目,这里的text可以是对当前版本的任何描述
下面的标记可以对所有的文档注释:
@since text :标记将产生一个”since”条目,这里的text是对引入特性的版本描述,如:@since version 1.7.1
@deprecated text:标记将对类,方法或变量添加一个不再使用的注释。Text中给出了一个取代的建议,
@deprecatrted Use <code> setVisible(true)</code> instead 通过@see @link标记,可以使用超级链接,链接到javadoc文档的相关部分或外部文档。
@see reference 标记将在see also 部分增加一个超级链接,它可以用于类中,也可以用于方法中。这里的reference可以用于下列情形之一:
package.class#feature label这一种是最常见的,只要提供类,方法,名字,javadoc就在文档中插入一个链接。如@see com.horstmann.corejava.Emplyee#raiseSalary(double)可以省略包名,甚至名名,类名,都省略,链接将定位于当前包呀当前类。一定要使用#,而不要使用句号。来分隔类名与方法名。
<a href=””>label</a>:如果@see标记后面有一个<字符,就需要指定一个超链接,可以超链接到任何URL
“text”:
包与概述注释:可以直接将类,方法,变量的注释放置在java源文件中,只要用/** */文档注释界定就可以了。要想产生产注释,就需要在每一个包目录中添加一个名为package.html的文件。在标记<body></body>之间的所有文本都会被抽取出来。可以为所有的源文件提供一个概述性的注释,这个注释将放置在一个名overview.html的文件中,该文件位于包含所有源文件的父目录中,标记<body></body>之间的所有文本,当用户从导航栏选择“Overview”时,就会显示出这些注释内容。注释的抽取:假设HTML文件将存放在目录docDirectory下,切换到包含想到生成文档的源文件目录就必须切换到包含目录com的目录。如果是一个包,就运行命令:javadoc –d ocDirectory nameOfPackage如果多个包生成文档,如果文件在默认包中,就运行:javac –d doc Directory *.java(使用通配符)。如果省略了-d docDirectory选项,html文件就被提取到当前目录下。
类的设计技巧:(1)一定将数据设计私有:最重要的是绝对不要破坏封装性,最好还是保持实例域的私有性。数据的表示很可能会改变,它们的使用方式却不会经常发生变化。当数据保持私有时,它们的表示形式的变化不会对类的使用者产生影响,即使出现bug也易于检测。
(2)一定要对数据初始化,java不对局部变量初始化,但是会对对象的实例域进行初始化,,最好不要依赖于系统的默认值,而是应该显式地初始化所有的数据,具体的初始化方式可以是提供默认值,也可以是在所有的构造器中设置默认值。
(3)不要在类中使用过多的基本数据类型:
(4)不是所有的域都需要独立的域访问器和域更改器
(5)使用标准格式进行类的定义:
公有访问特性部分
包作用域访问特性部分
私有访问特性部分
在每一部分中,应该按照下列的顺序列出:
实例方法
静态方法
(6)将职责过多的类进行分解。(降代耦合度)