本质上,包是一个唯一命名的类的集合,将类集合到包里面的主要原因,是为了当在应用程序中使用预先编写的类时避免与类自身可能引起的明明冲突。用于包中的类名不会妨碍另一个包或程序中的类名,因为此时,包中的类名都是通过报名加以限定的。举个栗子!٩(๑>◡<๑)۶,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. node.js express mvc轻量级框架实践

    本文记录的是笔者最近抽私下时间给朋友做的一个时时彩自动下注系统,比较简单,主要也是为了学习一下node.js. 其实逻辑没什么可以深谈的,主要是想说说这套代码结构.结构如下图: js的代码比较难以维护 ...

  2. GCD hdu2588

    GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  3. Python操作excel表格

    用Python操作Excel在工作中还是挺常用的,因为毕竟不懂Excel是一个用户庞大的数据管理软件 注:本篇代码在Python3环境下运行 首先导入两个模块xlrd和xlwt,xlrd用来读取Exc ...

  4. Yii 2.0 数据库操作总结

    1. 概述 操作数据库有2种方式: DAO(data access object),不安全 ORM(onject relational mapping) 2. DAO Yii::app()->d ...

  5. Java面向对象 线程技术--上篇

     Java面向对象   线程 知识概要:                   (1)线程与进程 (2)自定义线程的语法结构 (3)多线程概念理解 (4)多线程状态图 (5)多线程--卖票 (6)同 ...

  6. 如何在Windows系统中配置Mysql群集(Mysql Cluster)

    MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MySQL服务器故障不会对系统产生巨大的负面效应,系统的稳定性得到保障. Mysql群集(Cluster)简介 M ...

  7. dmesg和addr2line 定位 segfault

    程序长时间运行崩溃,但是没有保存core dump消息.可以用下面的方法定位出程序出错位置: 1. 用dmesg查找出错的代码段地址 ip 000000000041ccec 发生错误时指令的地址, s ...

  8. Qt+VS2015应用程序发布

    本文以Qt 5.9.1+VS2015编译环境为例介绍应用程序发布流程,也适用于Qt+mingw的情况. 1. Qt依赖库 将需要发布的exe(如test.exe),放到单独的目录. 在"开始 ...

  9. HashMap与HashTable的区别、HashMap与HashSet的关系

    http://blog.csdn.net/wl_ldy/article/details/5941770 HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是 ...

  10. win10 uwp 切换主题

    本文主要说如何在UWP切换主题,并且如何制作主题. 一般我们的应用都要有多种颜色,一种是正常的白天颜色,一种是晚上的黑夜颜色,还需要一种辅助的高对比颜色.这是微软建议的,一般应用都要包含的颜色. 我们 ...