一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. Aptana studio 3配色方案的修改方法

    http://www.weste.net/2013/1-29/88614.html Aptana studio 3的确是一个不错的IDE,但是默认的黑底白色代码样式看时间长了有点审美疲劳了,如何能够更 ...

  2. Java工程师成神之路 转

      一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http:/ ...

  3. HDU 2222 Keywords Search 【AC自动机模板】

    询问有多少个模式串出现在了文本串里面.将模式串插入Trie树中,然后跑一边AC自动机统计一下就哦了. 献上一份模板. #include <cstdio> #include <cstr ...

  4. Lucene新版本号对ConjunctionScorer的优化

    Lucene 4.0版本号的DocIdSetIterator中没有cost方法,而4.7.0则有这种方法,表示遍历整个DocIdSet的代价,对于DocsEnum就是其长度了,对于Scorer就能够是 ...

  5. 用最简单的例子理解适配器模式(Adapter Pattern)

    中国足球的水平虽然不高,但实际上,在每个城市会有一批足球爱好者,他们踢球.看球.懂球.有这样的2个足球爱好者,一个是左脚选手,另一个是右脚选手. public class PlayWithLeft { ...

  6. Maven私仓配置

    <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...

  7. eclipse svn最新更新地址

    http://subclipse.tigris.org/update_1.12.x http://subclipse.tigris.org/servlets/ProjectProcess?pageID ...

  8. Windows 7 下玩游戏不能全屏

    问题描述:许多用户反映,在 Windows 7 环境下,全屏游戏时两边屏幕都是黑的,只好窗口运行了.其实这是正常现象:有些游戏本身并没有提供宽屏分辨率支持.其图形界面都是按照一定比例(如 4:3)来设 ...

  9. Log4net 配置输出文本, 按年月日分文件夹 z

    在项目中新建 “log4net.config” 文件 <?xml version="1.0" encoding="utf-8" ?> <con ...

  10. eclipse 开发web程序,启动tomcat插件服务器的时候。部署目录在那里?

    不在tomcat-home/webapps/下面, 你做一个文件上传功能看看就知道了,临时目录一般是你的工作区间workspace\.metadata\.plugins\org.eclipse.wst ...