包的创建
一个类如果要在多个场合反复调用,可以把它放在上"包"中,这里的包实际上是一组类组成的集合,习惯称之为类库。包是一种松散的类的集合,通常,把具有共性的类放在同一个包中。包的组织采用分层结构,与文件系统中的目录的组织对应一致,通常将逻辑相关的类放在同一个包中。包将类的命名空间进行了有效划分,同一包中不能有2个同名的类。
在默认条件下,系统会为每一个语言文件创建一个无名包,这个源文件中定义的所有类都隶属于这一个无名包,它们之间可以相互引用非私有的域或方法,但无名包中的类不能被其他包中的类所引用。在一般的企业项目的开发中我们一般都会自定义一个包而不会用系统默认产生的包。
创建包的语句需要使用关键字package,而且要放在源文件的第一行。每一个源程序只能使用一次关键字package。
如何在DOS下编译带包的java程序?
比如说有一个下面这样的原程序 名字叫包组织.java
我将它放在一个叫java的目录下编译方法:
这样会在java这个目录下自动生成一个叫test的子目录(包名),并将编译成功的Test.class文件放置在test目录下。
通过以下方式进行运行:
自定义包名的时候有以下及格注意点:
- 包名全部由小写字母(多个单词也全部小写)。
- 如果包名包含多个层次,每个层次用“.”分割。
- 包名一般由倒置的域名开头,比如 com.baidu,不要有 www。
- 自定义包不能 java 开头。
包的引用
在一个类中可以引用与它在同一个包中的类,也可以引用其他包中的public类,但这时要指定包路径。
如果使用不同包中的其它类,需要使用该类的全名(包名+类名)。代码如下:
example.Test test = new example.Test();
其中example是包名,Test是类名,test是新建的对象
为了简化编程,Java 引入了 import 关键字,import 可以向某个 Java 文件中导入指定包层次下的某个类或全部类。import 语句位于 package 语句之后,类定义之前。一个 Java 源文件只能包含一个 package 语句,但可以包含多个 import 语句。
使用 import 导入单个类的语法格式如下:
import 包名+类名;
上面语句用于直接导入指定类,例如导入前面的 example.Test 类,代码如下:
import example.Test;
使用 import 语句导入指定包下全部类的用法按如下:
import example.*;
上面 import 语句中的星号(*)只能代表类,不能代表包,表明导入 example 包下的所有类。
提示:使用星号(*)可能会增加编译时间,特别是引入多个大包时,所以明确的导入你想要用到的类是一个好方法,需要注意的是使用星号对运行时间和类的大小没有影响。
Java 默认为所有源文件导入 java.lang 包下的所有类,因此前面在 Java 程序中使用 String、System 类时都无须使用 import 语句来导入这些类。但对于扫描输入的Scanner类,其位于 java.util 包下,则必须使用 import 语句来导入该类。
在一些极端的情况下,import 语句也帮不了我们,此时只能在源文件中使用类全名。例如,需要在程序中使用 java.sql 包下的类,也需要使用 java.util 包下的类,则可以使用如下两行 import 语句:
import java.util.*;
import java.sql.*;
如果接下来在程序中需要使用 Date 类,则会引起如下编译错误:
Test.java:25:对Date的引用不明确,
java.sql中的类java.sql.Date和java.util中的类java.util.Date都匹配
上面错误提示:在 Test.java 文件的第 25 行使用了 Date 类,而 import 语句导入的 java.sql 和 java.util 包下都包含了 Date 类,系统不知道使用哪个包下的 Date 类。在这种情况下,如果需要指定包下的 Date 类,则只能使用该类的全名,代码如下:
// 为了让引用更加明确,即使使用了 import 语句,也还是需要使用类的全名
java.sql.Date d = new java.sql.Date();
Java中常用的系统包
包 |
说明 |
java.lang |
Java 的核心类库,包含运行 Java 程序必不可少的系统类,如基本数据类型、基本数学函数、 字符串处理、异常处理和线程类等,系统默认加载这个包 |
java.io |
Java 语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等 |
java.util |
包含如处理时间的 Date 类,处理动态数组的 Vector 类,以及 Stack 和 HashTable 类 |
java.awt |
构建图形用户界面(GUI)的类库,低级绘图操作 Graphics 类、图形界面组件和布局管理 (如 Checkbox 类、Container 类、LayoutManger 接口等),以及用户界面交互控制和事 件响应(如 Event 类) |
java.awt.image |
处理和操纵来自网上的图片的 Java 工具类库 |
java.wat.peer |
很少在程序中直接用到,使得同一个 Java 程序在不同的软硬件平台上运行 |
java.net |
实现网络功能的类库有 Socket 类、ServerSocket 类 |
java.lang.reflect |
提供用于反射对象的工具 |
java.util.zip |
实现文件压缩功能 |
java.awt.datatransfer |
处理数据传输的工具类,包括剪贴板、字符串发送器等 |
java.sql |
实现 JDBC 的类库 |
java.rmi |
提供远程连接与载入的支持 |
java. security |
提供安全性方面的有关支持 |