包-java
Java 包
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
- 包的作用
- 创建包
- import 关键字
- package目录结构
- 设置CLASSPATH系统变量
包的作用
- 把功能相似或者相关的类或接口组织在同一个包总,方便类的查找和使用.
- 如同文件夹一样,树形目录结构.同一个包中类名字不同,不同包中类的名字是可以相同的.调用时加上包名,避免冲突
- 包也限定了访问权限,拥有报访问权限的类才能访问某个包中的类
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