概述


在java中,包(package),相当于文件夹。包里通常存放的是类文件,因为我们在编写程序的时候,难免会有类名相同的情况。为了对类进行分类管理,java提出了包机制解决方案,在不同包中可以有相同的类名,调用的时候连同包名一起就行。



目的


对于多个类为了便于管理(类同名情况)而提出的解决方案。



作用


  • 避免多个类重名的情况,如果出现两个相同名字的类,可通过包将两者区分,从而避免冲突。
  • 对类文件进行管理
  • 给类文件提供了名称空间。
  • 包的出现可以将java的类文件和源文件相分离。
  • 在调用其他包中的类时,需要写类的全称,也就是连同包名一起书写。当类存在多层包中时,使用import导入后,使用其类时,就可以不加包名了。 一个程序文件中只有一个package,可以有多个import。import导入的是包中的类或静态成员。



规则


  • 包必须写在程序的第一行,并且包名为全小写字母组成。因为要先有包,才知道class文件的存放地方。
  • 类的全称:包名.类名。
  • 编译定义了包的程序文件时,在编译时要指定包的存储目录。
    如:javac –d D:\CLASSPATH 类名.java



类间的访问权限


  • 要访问其他包中的类,需要定义类的全称:包名.类名。
  • 如果class文件目录不在当前路径,需要使用classpath设定环境变量,为JVM指明路径。
  • 被访问的包中的其他类权限必须是public。
  • 异包之间访问只能有两种权限可用:public和protected。protected是为其他包中的子类提供的一种权限。不同包中的子类可以直接访问父类中被protected权限修饰的成员。
  • 公有类只能访问其他包中的公有类或公有成员。


 

public

protected

default(friendly)

private

同类中





同包中




 

异包子类中



 

 

异包中


 

 

 



关键字


  • package:定义包。如:
    package bean;
  • import:导入,可以导入类,也可以导入静态成员(Java5支持),可以使用通配符*。如:
    import java.util.TreeSet;
    import java.util.*;
    import static java.lang.Math.max;
    import static java.lang.Math.*;



注意事项


  • 在导入包时,如果包中有很多类,可以使用通配符*,但是,不建议这么做。
  • import中使用通配符*,不会导入子包中的类。
  • 定义包名不要重复,可以使用url来完成定义,url是唯一的。
  • 导入的不同包中有相同类时,必须写类的全名以区分。



jar包

概述


class文件太多时,可以使用java中用jar工具来对包进行打包压缩,扩展名为jar。



使用


jar.exe工具的使用


创建jar包


jar -cvf mypack.jar packa packb


查看jar包


jar -tvf mypack.jar [>定向文件]


解压缩


jar -xvf mypack.jar


自定义jar包的清单文件


jar –cvfm mypack.jar mf.txt packa packb



jar包的作用


  • 可以将多个包进行压缩到为一个文件,方便项目的携带。
  • 方便于使用,只要在classpath设置jar路径,即可以执行jar包中的java程序。
  • 数据库驱动,SSH框架等都是以jar包体现的。



示例

PackFather.java
     
package packfather;

public class PackFather {
     
  protected void funcFather() {

    System.out.println( "Father run!");

PackSon.java

package packson;

     
public class PackSon extends packfather.PackFather {
   
  public void funcSon() {
  funcFather();
   System.out.println( "Son run!");
ackageDemo.java
     
package mypack; // 包名全小写

      
import packson.PackSon; // import packson.*;
     
class PackageDemo {
ublic static void main(String[] args) {
  /* packson. */ PackSon s = new /* packson. */PackSon();
   s.funcSon();
   System.out.println( "------------------------------" );
    packfather.PackFather f = new packfather.PackFather();
    f.funcFather(); //错误,PackFather中funcFather方法被protected修饰,只能在子类中访问。
   
    System.out.println( "Over!");

     
  }
     
}