本质上,包是一个唯一命名的类的集合,将类集合到包里面的主要原因,是为了当在应用程序中使用预先编写的类时避免与类自身可能引起的明明冲突。用于包中的类名不会妨碍另一个包或程序中的类名,因为此时,包中的类名都是通过报名加以限定的。举个栗子!٩(๑>◡<๑)۶,java.lang包中有个String类,但是假如我们自己恰好也定义了一个String类,那么我们在使用String名称的时候,会默认指向我们定义的类,此时若想继续使用java.lang里面的String类,就可以在代码中使用全名java.lang.String来调用同名的库类。

  【1】类打包

  简而言之,只要在类文件定义之前添加一条包语句“package <包名>”即可,且添加public关键字的类可在包外访问,不添加public的只能为包内方法访问,此外,所有包括到特定包名中的类文件必须放到包名所在目录里面。(注:如果想要构造的函数和方法能够从包的外部被访问,那么还需要在类中将他们声明为public)

  【2】包与目录结构

  包与存储他们的目录结构密切相关,一般来说,可以使用任意多用点号隔开的名称来定义包,但是包名必须能够反应用来存储这个包的目录结构。举个栗子:将名称为stu的类定义文件加上package A.a1,其结果是stu包含在A目录的子目录a1里面,最典型的是String类包含在java.lang包里面。

  【3】访问包

  在编译使用包的程序的时候,访问包的方法取决于包的存放位置,这里有两个选择,第一:是将包中类的.class文件和其源程序.java放在同一个以包名命名的那个目录下。第二:在编译程序的命令行中使用-classpath选项,因为这样只是短暂性地设置classpath而不会妨碍后续任何任务。举个栗子:

  javac -classpath "<包含类定义的包的绝对路径>" *.java

  事实上,后者是应用最广泛的一种,即在JDK里面,我们在执行java解释器时候总是能用-classpath选项来设置包的位置,这样的优点是该命令只对当前编译或者执行起作用,所以很容易在每一次运行时进行设置。

  【4】将类从包添加到程序中

  在编写的程序中,首部添加语句“import <包名>.*”,包名后面跟随的点号之后的通配符*表示选择包中的所有类,而不是选择目录下的所有文件。此时只使用类名就可以引用包中的任何公有类,但是!导入包中的所有的名称不应该是通常的做法,因为这和我们将类导入包中的最主要的目标相违背,因此只要显式地导入程序需要引用的名称。举个栗子:

  import <包名>.<类名>;

  确保了源文件里面只包含所需要的类,减少了与自己定义的类的名称发生冲突的可能性。这样的方法同样适用于从类中导入静态成员,例如使用圆周率π的时候,不使用Math.PI,取而代之的是语句“import static java.lang.Math.*;”,该语句可以导入Math类中所有的静态成员。

  【5】标准类

  

  (图片来源于:http://blog.csdn.net/zccst/article/details/5070334)

理解Java包的更多相关文章

  1. 理解Java中【包】的概念

    Java中用package关键字定义一个包,下面通过几个实验,理解Java中的包的概念和作用. 实验1:先看一个无包的情形 在G盘下新建一个Test.java,如图1: 写下面这些代码 <spa ...

  2. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

  3. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  4. java笔记--理解java类加载器以及ClassLoader类

    类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...

  5. 深入理解Java:注解

    注解作用:每当你创建描述符性质的类或者接口时,一旦其中包含重复性的工作,就可以考虑使用注解来简化与自动化该过程. Java提供了四种元注解,专门负责新注解的创建工作. 元注解 元注解的作用就是负责注解 ...

  6. java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  7. (3) 深入理解Java Class文件格式(二)

    好文转载:http://blog.csdn.net/zhangjg_blog/article/details/21487287 在上一篇文章 深入理解Java Class文件格式(一) 中, 介绍了c ...

  8. 【Todo】【转载】深入理解Java内存模型

    提纲挈领地说一下Java内存模型: 什么是Java内存模型 Java内存模型定义了一种多线程访问Java内存的规范.Java内存模型要完整讲不是这里几句话能说清楚的,我简单总结一下Java内存模型的几 ...

  9. [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)

    以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...

随机推荐

  1. uva 10391

    这个题,单纯做出来有很多种方法,但是时间限制3000ms,因此被TL了不知道多少次,关键还是找对最优解决方法,代码附上: #include<bits/stdc++.h> using nam ...

  2. 关于 HashMap 随笔

    hashMap 的一些认识: 基于哈希表的Map接口的非同步实现,定义了键映射到值的规则 此实现提供所有可选的映射操作,并允许使用null值和null键 根据hash算法,确定key-value的存贮 ...

  3. MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据

    记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...

  4. SVN初体验

    呐,部门领导要求今后项目部分内容要实行版本控制,因此有机会深入接触下SVN这门功课 ---------------------------------------------------------- ...

  5. UrlRewriter配置IIS支持伪静态

    使用UrlRewriter时遇到了一些问题,在园子里的博问中找到了Astar的回答,防止以后找不到,就记录下来了. UrlRewriter.NET官方地址:http://urlrewriter.net ...

  6. C-图文上边对齐

    1.效果 1.1 样式设置 2 效果  2.1 样式

  7. ubuntu中使用usb-creator制作live usb

    1.实验环境 ubuntu14.04 2.启动usb-creator 2.1 单击桌面左上角的搜索图标,输入usb-creator,然后选择“应用程序"中的”启动盘创建器“ 2.2 终端中输 ...

  8. SqlServer和Oracle中一些常用的sql语句3 行列转换

    --217, SQL SERVER SELECT Cust_Name , MAX(CASE WHEN Order_Date ='2009-08-01' THEN AR END) "2009- ...

  9. 学习笔记之CSS样式(选择器背景字体边框绝/相对、固定位置and分层流等)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. Android onSaveInstanceState和onRestoreInstanceState()

    首先来介绍onSaveInstanceState() 和 onRestoreInstanceState() .关于这两个方法,一些朋友可能在Android开发过程中很少用到,但在有时候掌握其用法会帮我 ...