一Java包(package)

       为了更好地组织类,Java提供了包机制,用于差别类名的命名空间。

       包的作用:

       A把功能类似或相关的类或接口组织在同一个包中,方便类的查找和使用。

       B如同文件夹一样。包也採用了树形文件夹的存储方式。同一个包中的类名字是不同的。不同的包中的类的名字是

能够同样的,当同一时候调用两个不同包中同样类名的类时,应该加上包名加以差别。因此。包能够避免名字冲突。

       C包也限定了訪问权限。拥有包訪问权限的类才干訪问某个包中的类。

       Java使用包(package)这样的机制是为了防止命名冲突,訪问控制。提供搜索和定位类(class)、接口、枚举

(enumerations)和凝视(annotation)等。

       包语句的语法格式为:

       package pkg1[.pkg2[.pkg3…]];

       比如,一个Something.java 文件它的内容:

<span style="font-size:18px;">package net.java.util;

public class Something{
//...
}</span>

       那么它的路径应该是 net/java/util/Something.java 这样保存的。

package(包)的作用是把不同的java程序分类保

存,更方便的被其它java程序调用。

       一个包(package)能够定义为一组相互联系的类型(类、接口、枚举和凝视),为这些类型提供訪问保护和命名空间

管理的功能。

      以下是一些Java中的包:

<span style="font-size:18px;">1)java.lang包:java的核心类库,包括了执行java程序不可缺少的系统类,如基本数据类型、基本数学函数、字符串
处理、线程、异常处理类等,系统缺省载入这个包。
2)java.io包:java语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等等。 3)java.util包:包括如处理时间的date类,处理变成数组的Vector类,以及stack和HashTable类。 4)java.awt包:构建图形用户界面(GUI)的类库,低级画图操作Graphics类,图形界面组件和布局管理如Checkbox
类、Container类、LayoutManger接口等,以及界面用户交互控制和事件响应,如Event类。
5)java.awt.image包:处理和操纵来自于网上的图片的java工具类库。 6)java.wat.peer包:非常少在程序中直接用到。使得同一个java程序在不同的软硬件平台上执行。
7)java.applet包。
8)java.net包:实现网络功能的类库有Socket类、ServerSocket类。
9)java.corba包和java.corba.orb包。
10)java.lang.reflect包:提供用于反射对象的工具。
11)java.util.zip包:实现文件压缩功能。
12)java.awt.datatransfer包:处理传输数据的工具类,包括剪贴板,字符串发送器等。
13)java.awt.event包。
14)java.sql包:实现JDBC的类库。
15)java.rmi 提供远程连接与载入的支持。 16)java.security 提供安全性方面的有关支持。 </span>

       开发人员能够自己把一组类和接口等打包,并定义自己的package。并且在实际开发中这样做是值得提倡的。当你

自己完毕类的实现之后。将相关的类分组,能够让其它的编程者更easy地确定哪些类、接口、枚举和凝视等是相关

的。

      因为package创建了新的命名空间(namespace),所以不会跟其它package中的不论什么名字产生命名冲突。

使用包这

种机制,更easy实现訪问控制,并且让定位相关类更加简单。

       二创建包

       创建package的时候,你须要为这个package取一个合适的名字。之后。假设其它的一个源文件包括了这个包提

供的类、接口、枚举或者凝视类型的时候,都必须将这个package的声明放在这个源文件的开头。

       包声明应该在源文件的第一行,每一个源文件仅仅能有一个包声明,这个文件里的每一个类型都应用于它。假设一个源

文件里没有使用包声明,那么当中的类,函数,枚举。凝视等将被放在一个无名的包(unnamed package)中。

       实例:

       让我们来看一个样例,这个样例创建了一个叫做animals的包。通常使用小写的字母来命名避免与类、接口名字的

冲突。

       在animals包中增加一个接口(interface):

<span style="font-size:18px;">/* 文件名称: Animal.java */
package animals; interface Animal { public void eat(); public void travel(); }</span>

       接下来,在同一个包中增加该接口的实现:

<span style="font-size:18px;">/* 文件名称 : Mammal.java */
package animals; public class Mammal implements Animal{ public void eat(){
System.out.println("Mammal eats");
} public void travel(){
System.out.println("Mammal travels");
} public int noOfLegs(){
return 0;
} }</span>

       然后。编译这两个文件:

       编译后的文件夹:

       animals包中的字节码文件(class文件):

       三importkeyword

       为了能够使用某一个包的成员,我们须要在Java程序中明白导入该包。使用"import"语句可完毕此功能。

      在java源文件里import语句应位于package语句之后。全部类的定义之前,能够没有。也能够有多条,其语法格式

为:import package1[.package2…].(classname|*);

      假设在一个包中,一个类想要使用本包中的还有一个类。那么该包名能够省略。

      实例:

      以下的payroll包已经包括了Employee类,接下来向payroll包中增加一个Boss类。Boss类引用Employee类的时候

能够不用使用payroll前缀,Boss类的实比例如以下:

<span style="font-size:18px;">package payroll;

public class Boss{

   public void payEmployee(Employee e){
e.mailCheck();
} }</span>

       假设Boss类不在payroll包中又会如何?Boss类必须使用以下几种方法之中的一个来引用其它包中的类:

       1)使用类全名描写叙述,比如:

        payroll.Employee

       2)使用用importkeyword引入,使用通配符(*)

        import payroll.*;

       3)使用importkeyword引入Employee类

       import payroll.Employee;

       注意:

       类文件里能够包括随意数量的import声明。import声明必须在包声明之后,类声明之前。

       我们继续接着来看创建包过程中的那个实例:

       我们再在源文件的文件夹下创建一个Test.java源文件:

<span style="font-size:18px;">import animals.*;

public class Test{
public static void main(String[] args){
Mammal m=new Mammal();
m.eat();
m.travel();
}
}</span>

       编译这个类出现例如以下问题:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

       这就须要我们把创建animals包的两个源文件删除或者又一次移到别的文件夹下。我把它放在了source文件夹下:

       再次编译Test.java源文件和执行字节码文件:

       四package的文件夹结构

       类放在包中会有两种基本的结果:

       A包名成为类名的一部分,正如我们前面讨论的一样。

       B包名必须与相应的字节码所在的文件夹结构相吻合。

       以下是管理你自己java中文件的一种简单方式:

       将类、接口等类型的源代码放在一个文本中。这个文件的名字就是这个类型的名字,并以.java作为扩展名。

比如:

<span style="font-size:18px;">//文件名称 :  Car.java
package vehicle; public class Car {
//类实现
}</span>

       接下来,把源文件放在一个文件夹中,这个文件夹要相应类所在包的名字:....\vehicle\Car.java

       如今。正确的类名和路径将会是例如以下样子:

       类名 -> vehicle.Car

       路径名 -> vehicle\Car.java (in windows)

       通常,一个公司使用它互联网域名的颠倒形式来作为它的包名.比如:互联网域名是apple.com,全部的包名都以

com.apple开头。包名中的每一个部分相应一个子文件夹。

       比如:这个公司有一个com.apple.computers的包。这个包包括一个叫做Dell.java的源文件,那么相应的。应该有

如以下的一连串子文件夹:....\com\apple\computers\Dell.java

       编译的时候。编译器为包中定义的每一个类、接口等类型各创建一个不同的输出文件,输出文件的名字就是这个类

型的名字,并加上.class作为扩展后缀。 比如:

<span style="font-size:18px;">// 文件名称: Dell.java
package com.apple.computers; public class Dell{
//
} class Ups{
//
}</span>

       如今,我们用-d选项来编译这个文件,例如以下:

javac -d . Dell.java

       这样会像以下这样放置编译了的文件:

.\com\apple\computers\Dell.class

.\com\apple\computers\Ups.class

       你能够像以下这样来导入全部 \com\apple\computers\中定义的类、接口等:

import com.apple.computers.*;

       编译之后的.class文件应该和.java源文件一样。它们放置的文件夹应该跟包的名字相应起来。

可是,并不要求.class

文件的路径跟相应的.java的路径一样。你能够分开来安排源代码和类的文件夹。

<path-one>\sources\com\apple\computers\Dell.java

<path-two>\classes\com\apple\computers\Dell.class

       这样。你能够将你的类文件夹分享给其它的编程人员,而不用透露自己的源代码。用这样的方法管理源代码和类文件能够

让编译器和java虚拟机(JVM)能够找到你程序中使用的全部类型。

       类文件夹的绝对路径叫做class path。设置在系统变量CLASSPATH中。编译器和java虚拟机通过将package名字加

到class path后来构造.class文件的路径。

       <path- two>\classes是class path,package名字是com.apple.computers。而编译器和JVM会在 <path-

two>\classes\com\apple\compters中找.class文件。

       一个class path可能会包括好几个路径。多路径应该用分隔符分开。

默认情况下,编译器和JVM查找当前文件夹。

JAR文件按包括Java平台相关的类,所以他们的文件夹默认放在了class path中。

       五设置CLASSPATH系统变量

       1)用以下的命令显示当前的CLASSPATH变量:

       Windows平台(DOS 命令行下)-> C:\> set CLASSPATH

       UNIX平台(Bourne shell下)-> % echo $CLASSPATH

       2)删除当前CLASSPATH变量内容:

       Windows平台(DOS 命令行下)-> C:\> set CLASSPATH=

       UNIX平台(Bourne shell下)-> % unset CLASSPATH; export CLASSPATH

       3)设置CLASSPATH变量:

       Windows平台(DOS 命令行下)-> set CLASSPATH=C:\users\jack\java\classes

       UNIX平台(Bourne shell下)-> % CLASSPATH=/home/jack/java/classes; export CLASSPATH  

       关于包的理解眼下就这些了。有些地方还是不太理解,须要在以后的实践中逐步加深对Java包的理解。错误的地

方请指出。

JavaSE入门学习17:Java面向对象之package(包)的更多相关文章

  1. JavaSE入门学习21:Java面向对象之接口(interface)(二)

    一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...

  2. JavaSE入门学习24:Java面向对象补充

    一Java中的Object类 Object类是全部Java类的父类.假设一个类没有使用extendskeyword明白标识继承另外一个类,那么这个类默认 继承Object类. public class ...

  3. JavaSE入门学习7:Java基础语法之语句(下)

    继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...

  4. JavaSE入门学习6:Java基础语法之运算符和语句(上)

    继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...

  5. 我的Java学习笔记-Java面向对象

    今天来学习Java的面向对象特性,由于与C#的面向对象类似,不需详细学习 一.Java继承 继承可以使用 extends 和 implements 这两个关键字来实现继承. extends:类的继承是 ...

  6. Android驱动-Java入门学习(java安装)

    在ubuntu 14.04上java开发环境. 下载 jdk-7u75-linux-x64.tar.gz 使用tar xvf jdk-7u75-linux-x64.tar.gz 解压 在/usr/li ...

  7. JDK源码学习之 java.util.concurrent.automic包

    一.概述 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CP ...

  8. JavaSE入门学习23:Java面向对象之构造方法

    学了JavaSE面向对象这一部分,也该对构造方法做一个总结了. 一构造方法 在多数情况下,初始化一个对象的终于步骤是去调用这个对象的构造方法. 构造方法负责对象的初始化工作,为 实例变量赋予合适的初始 ...

  9. JavaSE入门学习20:Java面向对象之接口(interface)(一)

    一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种详细实现体.而接口定义了某一批类所须要遵守的 ...

随机推荐

  1. Detecting Underlying Linux Distro

    If you are the owner of the system, then you know which Linux is installed and running. This article ...

  2. HDU 2604 Queuing 矩阵高速幂

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  3. svn(subversion)版本控制系统学习与理解

    定义:Apache Subversion(简称SVN,svn),一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS. 从这段话,我们可以得到四点信息: ...

  4. 关于OpenLDAPAdmin管理页面提示“This base cannot be created with PLA“问题. Strong Authentication Required问题

    经过查询,最终总结和处理如下: 1.首先需要在/etc/openldap/目录下,创建一个base.ldif文件,如下所示: 2.在base.ldif文件中,写入如下信息,为创建初始化根节点做准备工作 ...

  5. 《Windows核心编程》第十一章——线程池

    隐式使用工作项 #include <iostream> #include <windows.h> ; VOID NTAPI SimpleCallback(PTP_CALLBAC ...

  6. 《逆袭大学:传给IT学子的正能量》

    <逆袭大学:传给IT学子的正能量> 基本信息 作者: 贺利坚 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115347473 上架时间:2014-3-3 出版日期:201 ...

  7. Objective-C:三种文件导入的方式比较

    三种文件导入的方式比较:   类的前项声明@class.import.include:   1.采用@class 类名的方式,它会告诉编译器有这么一个类,目前不需要知道它内部的实例变量和方法是如何定义 ...

  8. OTL翻译(1) -- 说明

    说明 该文档说明的是4.0版本的ORACLE/ODBC和DB2-CLI模板库(OTL).OTL4.0(后面简称OTL)模板库是基于C++的模板的. OTL4.0是组合了C++的模板框架和OTL适配器. ...

  9. 矩阵求和及Kadane算法

    今天的一道题目: https://leetcode.com/problems/max-sum-of-sub-matrix-no-larger-than-k/ 有难度.这一类题目很有代表性. 搜到这个网 ...

  10. Win Socket编程原理及简单实例

    [转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html 使用Linux Socket做了小型的分布式,如Linux ...