包-java

Java 包

为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

  • 包的作用
  • 创建包
  • import 关键字
  • package目录结构
  • 设置CLASSPATH系统变量

包的作用

  1. 把功能相似或者相关的类或接口组织在同一个包总,方便类的查找和使用.
  2. 如同文件夹一样,树形目录结构.同一个包中类名字不同,不同包中类的名字是可以相同的.调用时加上包名,避免冲突
  3. 包也限定了访问权限,拥有报访问权限的类才能访问某个包中的类

Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。

语法格式:package pkg1.pkg2.ClassName.java

示例

package net.java.util;
public class Something{
   ...
}


一个包(package)可以定义为一组相互联系的类型(类、接口、枚举和注释),为这些类型提供访问保护和命名空间管理的功能。

             java.lang-打包基础的类
             java.io-包含输入输出功能的函数

 

创建包

创建包的时候,你需要为这个包取一个合适的名字。之后,如果其他的一个源文件包含了这个包提供的类、接口、枚举或者注释类型的时候,都必须将这个包的声明放在这个源文件的开头。

包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。

如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中

示例

/* 文件名: Animal.java */
package animals;

interface Animal {
   public void eat();
   public void travel();
}


开始实现:

package animals;

/* 文件名 : MammalInt.java */
public class MammalInt implements Animal{

   public void eat(){
      System.out.println("Mammal eats");
   }

   public void travel(){
      System.out.println("Mammal travels");
   } 

   public int noOfLegs(){
      return 0;
   }

   public static void main(String args[]){
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}


打包命令:

$ mkdir animals
$ cp Animal.class  MammalInt.class animals
$ java animals/MammalInt
Mammal eats
Mammal travel

 

import 关键字

语法格式:import pkg1.pkg2.classname;
示例在一个包中,一个类想要使用本包中的另一个类,那么该包名可以省略

package payroll;

public class Boss
{
   public void payEmployee(Employee e)
   {
      e.mailCheck();
   }
}


如果不在,引用方式

 

  • 类全名描述
    payroll.Employee
  • import关键字引入,使用通配符
    import payroll.*;
  • 使用关键字引用类
    import payroll.Employee;

注意:import必须在package声明之后,类声明之前,可以有多个

package目录结构

  • 包名成为类名的一部分
  • 包名必须与相应的字节码所在的目录结构吻合

一种简单方式:
将类、接口等类型源码放在一个文本中,这个文件的名字就是这个类型的名字,并以.java作为扩展名

//文件名:Car.java
package vehicle;
public class 文件名Car{
    //类实现
}


接着把源文件放在一个目录中,这个目录要对应类所在包名
...\vehicle\Car.java

 

现在类名和路径将会下面的样子
类名>vehicle.Car
路径名>vehicl\Car.java(windows)

一个公司使用它互联网域名颠倒形式来作为它的包名。
例如:name.com,所有包名都是以com.name开头。包名中每一个部分对应一个子目录。

编译的时候,编译器为包中定义的每个类、接口类型各创建一个不同的输出文件,输出文件的名字是这个类型的名字,并加上.class作为扩展后缀。

//文件名:Demo.java
package com.wangda.test;
public class Demo{

}
class Google{

}

 

出现以下状态

.\com\wangda\test\Demo.class
.\com\wangda\test\Google.class

以下方式导入所有的类、接口等

import com.wangda.test.*;

编译之后的 .class 文件应该和 .java 源文件一样,它们放置的目录应该跟包的名字对应起来。但是,并不要求 .class 文件的路径跟相应的 .java 的路径一样。你可以分开来安排源码和类的目录。

<path-one>\sources\com\wangda\test\Demo.java
<path-two>\classes\com\wangda\test\Google.class

这样,你可以将你的类目录分享给其他的编程人员,而不用透露自己的源码。用这种方法管理源码和类文件可以让编译器和java 虚拟机(JVM)可以找到你程序中使用的所有类型。

类目录的绝对路径叫做 class path。设置在系统变量 CLASSPATH 中。编译器和 java 虚拟机通过将 package 名字加到 class path 后来构造 .class 文件的路径。

<path- two>\classes是 class path,package 名字是 com.wangda.test,而编译器和 JVM 会在 <path-two>\classes\com\wangda\test 中找 .class 文件。

一个 class path 可能会包含好几个路径,多路径应该用分隔符分开。默认情况下,编译器和 JVM 查找当前目录。JAR 文件按包含 Java 平台相关的类,所以他们的目录默认放在了 class path 中。

设置CLASSPATH系统变量

显示当前CLASSPATH变量

Windows 平台(DOS 命令行下):C:\> set CLASSPATH
UNIX 平台(Bourne shell 下):# echo $CLASSPATH

删除当前内容

Windows 平台(DOS 命令行下):C:\> set CLASSPATH=
UNIX 平台(Bourne shell 下):# unset CLASSPATH; export CLASSPATH

设置当前内容

Windows 平台(DOS 命令行下): C:\> set CLASSPATH=C:\users\jack\java\classes
UNIX 平台(Bourne shell 下):# CLASSPATH=/home/jack/java/classes; export CLASSPATH
posted @ 2019-12-23 13:30  离数  阅读(315)  评论(0编辑  收藏  举报