《Java面向对象编程11》-软件开发第28篇
hi,各位同学好久不见!今天我们继续Java编程中关于对象的部分内容。
【前文回顾】
前面两节课我们主要介绍了在Java中最为基础的对象构造中的一些基本内容。主要包括:对象构造中的方法重载、默认域初始化和默认构造器、显式域初始化、参数名、调用另一个构造器、初始化块、对象析构与finalize方法。
【本次讲堂】
这节课我们主要介绍类的组织结构中的一个基本概念“包”。
什么是包
Java允许使用包(package)将类组织起来。借助于包可以方便地组织自己的代码,并将自己的代码与别人提供的代码库分开管理。
标准的Java类库分布在多个包中,包括java.lang,java.util和 java.net等。标准的Java包具有一个层次结构,如同硬盘的目录嵌套一样,也可以使用嵌套层次组织包,所有标准的Java包都处于java和javax包层次中。
使用包的主要原因是确保类名的唯一性。假如两个程序员不约而同地建立了Employee类,只要将这些类放置在不同的包中就不会产生冲突。事实上,为了保证包名的绝对唯一性,Sun公司建议将公司的因特网域名(这显然是独一无二的)以逆序的形式作为包名,并且对于不同的项目使用不同的子包。例如apache.org是apache的域名,基本上apache的很多项目都是org.apache开头的。
从编译器的角度看,嵌套的包之间没有任何联系。例如,java.util包与java.util.jar包毫无关系。每一个都拥有独立的类集合。
下面我们从以下几个方便详细说说关于包的那些事。
类的导入
一个类可以使用所属包中所有的类,以及其他包中的公有类(public class)。我们可以采用两种方式访问另一个包中的公有类。
使用时在每个类名前添加完整的包名,不推荐。
例子:
java.util.Date today = new java.util.Date();
使用import语句。这种用法在使用类时就不必写出包的全名了。是常见用法。import语句应该位于源文件顶部(但位于package语句的后面)
例子:
import java.util.*
...
Date today = new Date();
需要注意的是只能用*号导入一个包,而不能使用import java.*导入以java为前缀的包。大部分情况下,只要导入所需包即可,但是个别情况下,发生了类名冲突的时候,要注意包名。比如java.util和java.sql都有日期类。
import java.util.*;
import java.sql.*;
....
Date today;//error
如果上述情况使用Date类出错的原因就是编译器无法确定使用那一个Date类。可以通过java.util.Date;或者 java.util.Date today = new java.util.Date();的方式来解决。
静态导入
从Java SE5.0开始,import语句不仅可以导入类,还增加了导入静态方法和静态域的功能。通常会在以下两种实际应用上使用,会使代码看起来更清晰。
算术函数。对Math类使用静态导入,可以用更自然的方式使用算术函数。比如下面语句对比:
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.test;
public class Employee{
...
}
如果没有在源文件中放置package语句,这个源文件中的类就放置在一个默认包(default package)中。默认包是一个没有名字的包。
将包中的文件放到与完整的包名匹配的子目录中。
包作用域
前面已经接触过访问修饰符public和private,标记为public的部分可以被任意的类使用;标记为private的部分只能被定义他们的类使用。如果没有指定public或者private,这个部分(类、方法或变量)可以被同一个包中的所有方法访问。
类路径
类存储在文件系统的子目录中。类路径必须与包名匹配。此外,类文件也可以放在Jar文件中。
为了使类能够被多个程序共享,需要做到以下几点:
将类放到一个目录中。
将jar文件放在一个目录中。
设置类路径(class path)。类路径是所有包含类文件的路径的集合。在unix环境中,类路径中的不同项目之间采用冒号(:)分隔,而在windows环境中,则以分号(;)分隔。句点(.)表示当前目录。
类路径所列出的目录和归档文件是搜寻类的起始点。
设置类路径
最好采用-classpath(或-cp)选项指定类路径
也可以通过设置CLASSPATH环境变量完成这个操作。其详细情况依赖于所使用的shell。
好了,今天的内容就这么多,希望大家好好学习。我是cc,下次课不见不散。
关注公众号,回复“加入觅识帮”,识别群二维码,期待你的加入。
让我们共同相伴,开启软件知识之旅。
关注我们