一、Java类包
1、Java类包
Java中每个接口或类都来自不同的类包,无论是JavaAPI中的类与接口还是自定义的类与接口都需要隶属于某-一个类包,这个类包包含了一些类和接口。如果没有包的存在,管理程序中的类名称将是一件非常麻烦的事情。在Java中采用类包机制非常重要,类包不仅可以解决类名冲突问题,还可以在开发庞大的应用程序时,帮助开发人员管理庞大的应用程序组件,方便软件复用。
一个完整的类名需要包名与类名的组合,每个类都隶属于一个类包,只要保证同一类包中的类不同名,就可以有效地避免同名类冲突的情况。当然包名也可能产生冲突,为了避免这样的问题,在Java中定义包名时通常使用创建者的Internet域名的反序,由于Intermnet域名是独一-无二的,包名自然不会发生冲突。
例:
java.util.Date date = new java.util.Date();
java.sql.Date date2 = new java.sql.Date(2333);
同一个包中的类不必存放在同一个位置,如com.lzw.class1和com.lzw.class2 可以一个放置在C盘,一个放置在D盘,只要将CLASSPATH分别指向这两个位置即可。
2、创建包
在Java中包名设计应与文件系统结构相对应,如一个包名为com.lzw,那么该包中的类位于com文件夹下的lzw 子文件夹下。没有定义包的类会被归纳在预设包(默认包)中。在实际开发中,应该为所有类设置包名,这是良好的编程习惯。
在类中定义包名的语法如下:
package 包名
在类中指定包名时需要将package表达式放置在程序的第一行,它必须是文件中的第一行非注释代码,当使用package关键字为类指定包名之后,包名将会成为类名中的一部分, 预示着这个类必须指定全名。
注:Java包的命名规则是全部使用小写字母。
3、导入包
使用import导入包。在使用import关键字时,可以指定类的完整描述,如果为了使用包中更多的类,可以在使用import关键字指定时在包指定后加上*,这表示可以在程序中使用包中的所有类。
如果类定义中已经导入com.lzw.Math类,在类体中再使用其他包中的Math类时则必须指定完整的带有包格式的类名,如这种情况再使用java.lang 包的Math 类时就要使用全名格式java.lang.Math。在程序中添加import关键字时,就开始在CLASSPATH指定的目录中进行查找,查找子目录com.lzw,然后从这个目录下编译完成的文件中查找是否有名称符合者,最后寻找到Math.class文件。另外,当使用import指定了一个包中的所有类时,并不会指定这个包的子包中的类,如果用到这个包中的子类,需要再次对子包作单独引用。
在Java中将Java源文件与类文件放在一起管理是极为不好的管理方式。可以在编译时使用-d参数设置编译后类文件产生的位置。使用DOS进入程序所在的根目录下,执行如下命令:
javac -d ./bin/ ./com/lzw/*.java
这样编译成功后将在当前运行路径下的bin目录中产生com/lzw路径,并在该路径下出现相应源文件的类文件。如果使用Eeclipse编译器,并在创建项目时设置了源文件与输出文件的路径,编译后的类文件会自动保存在输出文件的路径中。
如果不能在程序所在的根目录下使用javac.exe 命令,注意在path环境变量中设置Java编译器所在的位置,假如是C:Javaljdk1.6.0_03\bin, 可以使用set path=C:Java\jdk1 .6.0_ 03\bin;%path%命令在DOS中设置path环境变量。
4、使用import导入静态成员
import关键字除了导入包之外,还可以导入静态成员,这是JDK 5.0以上版本提供的新功能。导入静态成员可以使程序员编程更为方便。语法如下:
import static 静态成员
例:
package com.lzw;
import static java.lang.Math.*;
import static java.lang.System.*;
public class ImportTest {
public static void main(String[] args) {
// 在主方法中可以直接使用这些静态成员
out.println("1和4的较大值为:" + max(1, 4));
}
}
输出:
从本例可看出,分别使用import static导入了 java.lang.Math类中的静态成员方法max()和java.lang.System类中的out成员变量,这时就可在程序中直接引用这些静态成员,如在主方法中的out.println()表达式以及直接使用max()方法。
二、final
1、final变量
final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常,由final 定义的变量为常量。
final关键字定义的变量必须在声明时对其进行赋值操作。final除了可以修饰基本数据类型的常量,还可以修饰对象引用。由于数组也可以被看作一个对象来引用,所以final可以修饰数组。一旦一个对象引