[学习笔记]Java包机制

概述

在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!");
}
}
 
PackageDemo.java
package mypack; // 包名全小写
 
import packson.PackSon; // import packson.*;
 
class PackageDemo {
public 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!");
}
}

你可能感兴趣的:(Java)