我们在最开始写一个Java的时候,会发现我们的那个项目,帮助我们自动生成了一些东西,就比如那个第一行,就有package 项目名,那我们当时看到就很不理解,但还是硬着头皮往下写了,我们这篇就来好好了解一下包吧
我们都知道面向对象要来实际开发的话,需要设计很多的类,虽然Java为每一个类都生成了一个字节码文件,但是当声明的类很多的时候,发生冲突的可能也很大,那我们就需要一些东西来帮助我们管理这些类—即包(package)
包
Java语言提供的一种区别类名空间的机制
- 每个包对应一个文件夹,
- 我们在源程序中可以声明类所在的包,
- 同一个包中的类名不能重复,不同包中的类可以相同
- 默认情况下,同一包中的类可以相互访问
- 若没有声明类所在的包,则会放在默认包中
使用package来创建包
若要创建自己的包,则必须以package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包
格式如下
package 包名1[ .包名2 [.包名3]...];
经过package之后,同一文件内的所有类或接口都被纳入相同的包中,而Java编译器会将包视同为文件系统的文件夹来管理,同时.用来指明文件夹的层次
e.g.
package cgj.ly.mapackage;
指定了这个包中的文件存储在文件cgj\ly\mypackage中
注意:包名要与对应的文件夹的字母大小一致
改变包名时要同时改变其对应的文件夹名
如果没有使用package语句声明类所在的包,则Java默认包的路径是当前文件夹,并且没有包名,即为无名包,无名包中不能有子包
Java语言中的常用包
Java中的package是用来存放类与接口的地方,所以也把package译为类库,即Java的类库时以包的形式实现的,Java已经把功能相近的类分门别类存放在不同库中,
其常用包有
- java.lang 语言包
- java.io 输入输出流的文件包
- java.awt 抽象窗口的工具包
- java.swing 轻型组件工具包
- java.util 实用包
- javax.swing.JApplet 小程序包
- java.net 网络功能包
- java.sql 数据库连接包
- java.text 文本包
语言包
提供了Java语言最基础的类
包含如下的类
- Object类
- 数据类型包装类
- 字符串类
- 数学类
- 系统和运行时类
- 类操作类
- 错误和异常处理类
- 线程类
- 过程类
输入输出流的文件包
包含实现Java程序与操作系统,用户界面以及其他Java程序之间的数据交换所使用的类
包含如下
- 基本输入输出流类
- 文件输入输出流类
- 过滤输入输出流类
- 管道输入输出流类
- 随机输入输出流类
抽象窗口工具包
用来构建图形用户界面(GUI)的类库,包含许多界面元素和资源
可很方便的 编写美观,实用,标准化的应用程序界面
提供三个方面的设计支持
低级绘图操作,图形界面组件和布局管理,界面用户交互控制和事件响应
包含类如下
- 绘图类
- 各种控件类
- 布局管理类
- 事件类
轻型组件工具包
是AWT工具包的扩展,Swing组件是纯Java编写的,不直接使用本地组件
包含类如下
- 组件类
- 布局管理类
实用包
实现不同实用功能的类,包括日期类,集合类等
- 数据输入类
- 日期类
- 链表类
- 向量类
- 哈希表类
- 栈类
- 树类
小程序包
实现运行在Internet浏览器中的JavaApplet的工具类库
网络功能包
实现的主要功能为底层的网络通信,访问Internet资源
包含类如下
- 访问网络资源类
- 套接字类
- 服务器端套接字类
- 数据报打包类
- 数据报通信类
数据库连接包
实现JDBC(Java数据库连接)的类库,只要安装合适的驱动程序,同一个Java程序不需修改就可以访问这些不同数据库中的数据
Java语言中的几个常用类
- Date类
描述日期时间的类 - Calendar类
描述日期时间的抽象类 - Random类
模拟一个伪随机数发生器 - Math类
提供了两个常量pi和e的取值以及大量用于计算的基本数学函数
import语句引入
- 导入包
如果要使用Java包中的类,必须在源程序中庸import语句导入所需要的类
格式如下
import 包名1[. 包名2[.包名3]].类名 | *
import 为关键字,后面的均为包的层次,对应于文件夹,类名则指明要导入的类,如果要从一个类库中导入多个类,则可以使用*来表示包中所有的类,多个包名及类名之间用.分隔
e.g.
import java.awt.mypackage;
import java.awt.event.*;
要注意的是Java编译器为所有的程序都自动的导入了java.lang包,所以我们不需要再用import来导入了
注意:使用*只能表示本层次的所有类,不包含子层次下的类
当然我们可以在使用类的地方都指明包含该类的包,这样就可以不用import了,而当导入的几个包含有名字相同的类,则当使用该类时,必须指明包含他的包
e.g.
import java.util.*;
class myDate extends Date{
...
}
当然也可以给出该类全称来引入
class myDate extends java.util.Date{
...
}
- Java包的路径
Java使用文件系统来存储包和类,类名就是文件名,包名就是文件夹名,若要引用Java包,则要告诉系统在哪找到
Java程序结构
- package ---- //声明包 0个或1个
- import -----//导入包,0个或多个
- public class —//声明公有类,0个或1个,文件名与该类名相同
- class ----//声明类,0个或多个
- interface ----//声明接口,0个或多个