Java包(package)详解
Java包(package)详解
在编写Java程序时,随着程序架构越来越大,类的个数越来越多,这时候会发现管理程序中维护类名称也是一件很麻烦的事情,尤其是一些同名问题的发生。有时候,开发人员还可能需要将处理同一方面的问题的类放到同一个目录下,以便于管理。
为了解决以上的问题,Java引入了包(package)机制,提供了类的多层命名空间,用于解决类的命名冲突,类文件管理等问题。
包允许将类组合成娇小的单元(类似于文件夹),它基本上隐藏了类,并避免了名称上的冲突。包允许在更广泛的范围内保护类,数据和方法。你可以在包内定义类,而包外的方法不能直接访问该类。这使你的类相互之间有了访问权限的限制。
包的作用如下:
1.区分相同名称的类。
2.能够较好地管理大量的类。
3.能控制访问范围。
包定义
Java中使用package语句定义包,package语句应该放在源文件的第一行,在每一个源文件中只能有一个包定义语句,并且package语句适用于所有的类型(类,接口,枚举和注释)的文件。
定义包语法如下:
package 包名;
Java包的命名规则如下:
包名全部由小写字母组成(多个单词也全部小写)。
如果包名包含多个层次,每个层次用“.”分割。
包名一般由倒置的域名开头,比如com.baidu,不要有www。
自定义包不能由java开头。
注意:如果在源文件找那个没有定义包,那么类,接口,枚举和注释类型文件会被放进一个无名的包中,也称为默认包。在实际的企业开发中,通常不会把类定义在默认包下。
包导入
Java引入了import关键字来实现包的导入这个功能,import可以向某个Java文件中导入指定包层次下的某个类或全部类。import语句位于package语句之后,类定义之前。一个Java源文件只能包含一个package语句,但是可以包含多个import语句。
使用import导入单个类的语法格式如下:
import 包名+类名;
上面语句用于直接导入指定类,例如导入example包中的Test类,代码如下:
import example.Test;
使用import语句导入指定包下的全部类的语法如下:
import example.*;
上面语句中的星号(*)只能代表类,不能代表包,表明导入example包下的所有类。
提示:使用星号(*)可能会增加编译时间,特别是导入多个大包时,所以在导入类时最好明确的导入你想要用到的类。需要注意的是使用星号对运行时间和类的大小没有影响。
通过使用import语句可以简化编程,但import语句并不是必须的,如果在类里使用其他类的全名,可以不使用import语句。
Java默认所有源文件导入java.lang包下的所有类,因此前面在Java程序中使用String,System类时都无需使用import语句来导入这些类。但对于像Arrays这些类,其位于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 SE提供了一些系统包,其中包含了Java开发中常用到的基础类。在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 | 提供安全性方面的有关支持 |
大家现在只需要对这些包有一个大致的印象即可,随着博客后面的介绍,大家会逐渐熟悉他们的用法。
Java包(package)详解相关推荐
- 包package详解
一.情景需求: 1.描述: 新建一个文件名Demo1,在里面写一个类文件Demo1,然后再新建一个文件名Demo2,在里面类文件仍然以Demo1命名,先对Demo1进行编译,然后再对Demo2进行编译 ...
- Java开源项目Hibernate包作用详解
Java开源项目Hibernate包作用详解 本文引自:http://hi.baidu.com/nick6610/blog/item/70b58afa0d0eab9259ee90f7.html Jav ...
- jmeter 导入java,JMeter导入自定义的Jar包的详解教程
1.简介 原计划这一篇是介绍前置处理器的基础知识的,结果由于许多小伙伴或者童鞋们在微信和博客园的短消息中留言问如何引入自己定义的Jar包呢???我一一回复告诉他们和引入插件的Jar包一样的道理,一通百 ...
- Java注解(Annotation)详解
转: Java注解(Annotation)详解 幻海流心 2018.05.23 15:20 字数 1775 阅读 380评论 0喜欢 1 Java注解(Annotation)详解 1.Annotati ...
- java nio详解,Java NIO API详解
Java NIO API详解 在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API.对于大多数应用来说,这样的API使用很方 便,然而,一些对 ...
- Eclipse Java Build Path详解
Eclipse Java Build Path详解 1.设置"source folder"与"output folder". * source folder:存 ...
- Thrift实现C#调用Java开发步骤详解
概述 Thrift实现C#调用Java开发步骤详解 详细 代码下载:http://www.demodashi.com/demo/10946.html Apache Thrift 是 Facebook ...
- Java SPI机制详解
Java SPI机制详解 1.什么是SPI? 2.SPI的用途 Driver实现 Mysql DriverManager实现 spi工具类`ServiceLoader` 将自己注册到驱动管理器的驱动列 ...
- Java中super详解
目录 Java中super详解 super的作用: 1. 通过super可以访问父类的构造方法 2. 通过super可以访问父类的属性(非私有) 3. 通过super可以访问 ...
- Java期末复习题详解
Java期末复习题详解 选择题 1 .class: .java: .cpp: .txt: 2 3 4 封装: 继承: 覆盖: 重载: 5 构造函数: 特点: 6 异常处理: 注:catch可以进行多重 ...
最新文章
- windows nodejs mysql_windows server 安装 mysql + nondejs连接mysql
- 简述Linux目录结构和系统结构
- Py之cx_Freeze:Python库之cx_Freeze库(程序打包)简介、安装、使用方法详细攻略—案例之实现机器人在线24小时智能翻译
- element ui怎么调图标的大小_大明:网页字体大小怎么调?教你方法一键搞定
- rac环境改动spfile后遭遇ora-29250小例
- 线程同步--线程间通信
- USACO Training Section 1.1 Your Ride Is Here
- [恢]hdu 2074
- Quartz 触发器(SimpleTriggerCronTrigger )配置说明 cronExpression表达式 转
- lucas+卡特兰数
- Easyui 中获取DataGrid中所有数据
- JS魔法堂:LINK元素深入详解
- Flutter圆形图片
- 【聚水潭】胜算操作手册
- 华硕x580nv拆机_看懂一篇拆机贴 拆遍天下机 华硕A45VM拆机清灰换硅脂 怒降25度!...
- 幻数 linux_查找第n个幻数
- 3D动画效果照片墙demo
- RRPP相切环配置示例
- 电商女装评论数据集分析
- 【转载】自然界通用的“质子缓存”模型