`
0428loveyu
  • 浏览: 30580 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Java包(package)

 
阅读更多

Java中的包(package)将一组相关的类型(type)组织在一起,这里的type包括类class、接口interface、枚举类型enum、注释类型。枚举类型可以看成是特殊的class,而注释类型可以看成特殊的interface,所以一般说type就是class和interface。


包在概念上式一种抽象结构,在代码层次上面,如果要将某个type放进某个包,就在该type的最前面加入一条package语句。package语句的具体格式为:package package_name;关于包名在下文说明。在代码文件的结构上,属于同一个包的代码在相同的文件目录下。例如,在JDK中,有关Java的基础类型放在名为java.lang的包中,这些类型的代码文件都在...\java\lang\目录结构中。有关输入输出的type被组织在java.io包中。我们在写自己的代码的时候,也将我们的代码组织在各个包中,如果一个type中没有package语句,那它会组织到一个默认的包中。一般情况下都将自己的代码放进包中,除非是刚刚入门或者临时测试的代码。


那么为什么要使用包呢?至少有以下几个原因:

-- 让我们方便地知道在同一个package中的这些类型是相关的。

-- 便于找到需要的type在哪里。比如我要找输入输出的类型,很容易知道要在java.io中寻找。

-- 防止命名冲突。一旦使用包以后,类的全名将包括包名在内,不同程序员之间即使使用了相同的类名,加上自己的包名或就不会冲 突。另外也可以避免自己的类名与Java标准库中的类名冲突。

-- 包另外一个重要作用就是进行访问控制,如果一个类型或者它的成员没有显式声明访问修饰符(public、protected、private), 在类型的使用范围是其 所在的包。包外的类型都不能使用这个类型。


我们知道如果两个类不在同一个包中,那它们是允许有相同名字的,因为不同的包将使它们的完全限定名不同。更简单的说法,一个type由它的完全限定名来标识。即便如此,不同的程序员也有可能使用完全相同的包名,并在这个包中定义相同名字的类,有什么办法能有效解决这个命名冲突吗?因此,包的命名就存在一些惯例做法,例如,包名一般用全部小写字母,用于区分type。一般建议用域名的反序来命名java包,例如新浪的域名为sina.com.cn,那么新浪的程序员可以将包命名为cn.com.sina.mypackage。至于在同一个反序域名下还存在冲突,就需要协调了。Java语言本身的包用java或者javax开头。需要注意的是,一些域名可能是非法的包名,比如含有“-”、java关键字或者其他特殊字符,这时候建议将这些非法字符换成下划线。比如域名为test-name.com,报名可以是com.test_name,域名为example.int相应的包名int_.example遇到诸如123的,换成_123等等。

另外需要注意的是,包与包之间不存在层次结构,比如java.awt和java.awt.color这两个包,属于前者的type放在...\java\awt目录下,属于后者的type放在...\java\awt\color目录下,但是java.awt.color不包含在java.awt中,之所以这么命名只是为了让它们之间的关系更明显。因此,导入java.awt.*知识导入了java.awt包中的所有type,而不导入java.awt.color包中的type。


使用包中的成员(type)

如果想在包外使用这个包中的type,有以下几种方式:

1. 使用完全限定名,例如为了使用Arrays,创建对象的时候用new java.util.Arrays。

2. 导入想要的type。import java.util.Arrays; 导入之后就可以多次使用。

3. 导入包中所有类。import java.util.*;

三种情况各有不同,使用时自行选择。为了方法,Java编译器自动导入了两个包(1)java.lang(2)当前包(包含该源码的包)。你肯定没有import java.lang.String过吧?当前包中的类也可以直接使用了,无需导入。另外,如果在同一个类中导入两个相同名字的类,此时必须使用完全限定名进行区分。


静态导入

如果你在类中需要频繁使用某个类的静态域或者静态方法,这时候可以考虑使用静态导入。例如java.lang.Math中的静态域PI。正常情况下,你这样使用Math.PI,但是如果你使用的次数十分频繁,你可能不想一直写Math,所以你首先import static java.lang.Math.PI; 然后你就直接使用PI就够了,其他cos函数、sin函数也一样,静态导入可以使得表达式更接近数学上的表达。将包中的全部静态成员一次性导入也是没有问题的:import java.lang.Math.*; 注意区分静态导入与一般的导入,一般的import是为了导入某个需要的type,而static import是为了使用类型中的静态域或者静态方法。静态导入需要十分谨慎地使用。

分享到:
评论

相关推荐

    java矩阵包Jampack: A Java Matrix Package

    ampack (JAva Matrix PACKage) is a collection of cooperating classes designed to perform matrix computations in Java applications. Jampack was developed by the author at NIST and the University of ...

    java中package用法详解

    2. **包的声明**:使用`package`关键字,并将Java源文件置于与包名一致的目录结构中。 3. **编译与路径**:使用`javac`命令时,确保正确指定`-d`选项以生成正确的目录结构。 4. **Classpath设置**:确保项目依赖的...

    Java 包的使用

    下面将详细介绍Java包的使用及其相关知识点。 首先,我们来看一下Java包的定义和作用: 1. **定义**:Java包是一组相关的类和接口的集合,它们被封装在一起,形成一个命名空间。每个包都有一个唯一的名称,通常是...

    java深度历险 详细讲解了java的package机制等

    在Java编程语言中,`package`和`import`机制是构建大型、模块化代码库的关键要素,它们有助于组织和管理类以及确保代码的可重用性。本篇将深入探讨这两个概念,以及如何通过Visual Studio .NET来操控Java虚拟机(JVM...

    java servlet package

    这个"java servlet package"可能包含了一系列与Servlet相关的资源和示例,有助于理解和学习Servlet开发。让我们逐一分析压缩包中的文件: 1. `home-banner-468x60.gif`:这可能是一个网站的横幅图像,通常位于网页...

    java-packagename-regex:Java 包名称的正则表达式。 参考 [Java 命名包](http

    java-包名-正则表达式 Java 包名的正则表达式。 使用安装 npm i java-packagename-regex --save 用法 var packageNameRe = require ( 'java-packagename-regex' ) ; var match = packageNameRe ( ) . exec ( '...

    java类库 java包

    接下来,我们讨论Java包。包在Java中扮演着组织和命名空间的角色。它帮助管理类的命名冲突,并允许开发者将相关的类和接口组织在一起。包通过`package`关键字声明,比如`package com.example.myapp`。常见的包有`...

    Java基础入门自学课件 第11章 包-package(共17页).ppt

    Java基础入门自学课件 第11章 包-package Java基础入门自学课件第11章讲解了Java编程语言中的包机制,包括如何导出jar包和如何导入jar包。下面是该课件的详细知识点总结: 一、Java中的包机制 Java中的包机制是指...

    java中package和import的作用

    在Java编程语言中,`package`和`import`是非常重要的两个概念,它们分别用于组织代码结构和引入外部类或包,对于理解Java程序的模块化和包管理机制至关重要。 ### Java中的Package #### 1. Package的概念 在Java中...

    java-package与import机制

    ### Java Package与Import机制详解 #### 一、引言 对于很多刚开始接触Java编程的初学者来说,往往是从购买一本入门书籍开始他们的Java学习之旅。在这个过程中,他们可能会下载最新的Java SDK并安装在自己的电脑上...

    java打包为jar

    在Java开发过程中,将项目打包成可执行的JAR(Java Archive)文件是常见的操作,这使得代码可以方便地分发、部署和运行。本文将详细介绍如何将Java工程打包成可执行的JAR文件。 首先,确保你有一个完整的Java工程,...

    java RS232 package+测试类

    Java RS232 Package是用于处理串行通信的软件包,尤其在Java编程环境中,它提供了与RS-232接口设备进行数据交换的能力。RS-232,全称是电子工业协会(EIA)的《数据终端设备(DTE)与数据通信设备(DCE)之间的串行...

    浅谈java包的使用

    而Java包(Package)就是用来实现这种逻辑分组的一种机制。通过将相关的类放入同一个包中,不仅可以避免命名冲突,还能有效地管理和组织代码。 #### 二、Java包的概念 Java包是一种组织类和接口的方式,它允许...

    JAVA包的引入问题

    ### JAVA包的引入问题详解 #### 一、背景介绍 在Java编程中,包(package)是一种组织类和接口的方式,可以有效地避免命名冲突,并且能够提高代码的可维护性。本文将详细介绍Java中的包是如何引入的,以及在实际操作...

    java 包的简单练习

    Java包(Package)是Java编程语言中的一个重要组织结构,它帮助我们管理类和接口,使得代码更加有序,便于重用和防止命名冲突。本练习旨在深入理解Java包的使用,通过个人笔记和代码注释来解析相关知识点。 1. **包...

    Java中package语句.pdf

    在Java编程语言中,`package`语句是一个至关重要的概念,它主要用于组织和管理源代码,使得类的结构更加清晰,避免命名冲突。本文将详细阐述`package`语句的基本语法、作用以及编码约定。 首先,`package`语句的...

    Java软件开发实战 Java基础与案例开发详解 5-9 包 package 共15页.pdf

    ### Java包(package) #### 5.9 包 包是为了便于管理大量类而引入的概念,可以避免类名冲突问题。 #### 5.9.1 为什么需要包 - **便于管理**:将相关的类组织在一起,便于管理和查找。 - **防止命名冲突**:不同的包...

    Java 中的 ClassPath 和 Package

    Java中的ClassPath和Package是Java开发中至关重要的概念,它们直接影响到Java程序的编译和运行。在这篇文章中,我们将详细探讨这两个主题。 首先,让我们理解什么是ClassPath。ClassPath是Java虚拟机(JVM)查找类...

    java的各种类库 java包

    Java的类库,也称为Java包(Package),是Java生态系统的重要组成部分。这些类库提供了丰富的功能,帮助开发者快速构建复杂的应用程序,而无需从零开始编写所有代码。本篇文章将深入探讨Java中的各种类库及其重要性...

    snmp4j-1.7.6a.zip_SNMP4J例子_java snmp编程_package_snmp in java _snm

    Java SNMP Package:这是一个实现了SNMP协议的Java包.它提供对基本的SNMP客户端与在SNMP版本1和2中定义的代理操作的支持.这个包提供了一种机制用于取得与设置SNMP对象标识(OID:object identifier)值通过一个简单的...

Global site tag (gtag.js) - Google Analytics