本质上,包是一个唯一命名的类的集合,将类集合到包里面的主要原因,是为了当在应用程序中使用预先编写的类时避免与类自身可能引起的明明冲突。用于包中的类名不会妨碍另一个包或程序中的类名,因为此时,包中的类名都是通过报名加以限定的。举个栗子!٩(๑>◡<๑)۶,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. vue练手小项目--眼镜在线试戴

    最近看到了一个眼镜在线试戴小项目使用纯js手写的,本人刚学习vue.js没多久,便试试用vue做做看了,还没完善. 其中包括初始图片加载,使用keywords查找,父子组件之间传递信息,子组件之间传递 ...

  2. 通过express搭建自己的服务器

    前言 为了模拟项目上线,我们就需要一个服务器去提供API给我们调用数据.这次我采用express框架去写API接口.所有请求都是通过ajax请求去请求服务器来返回数据.第一次用node写后端,基本就是 ...

  3. 【Spring】面向切面之AOP

    前言 前面已经讲解了bean的装配技术,接着学习Spring中另外一个核心概念:切面. 面向切面 面向切面编程 切面能够帮助模块化横切关注点,横切关注点可以被描述为影响应用的功能,如为业务添加安全和事 ...

  4. EnCase missed some usb activities in the evidence files

    My friend is a developer and her colleague May was suspected of stealing the source code of an impor ...

  5. 当前页面的url未注册 微信支付

    原因1:公众号支付授权目录或测试授权目录设置不正确. 原因2:微信SDK"WxPay.JsApiPay.php"文件中GetOpenid方法中$baseUrl的拼接的结果与支付授权 ...

  6. 实例化vue之前赋值html元素导致事件失效

    先实例化Vue对象,再操作其他对象,Vue对象声明时会渲染html容器内的所有元素, 会导致元素事件失效或dom元素重新创建,所以涉及html元素的对象都要在实例化Vue之后执行. 下面是简要的例子, ...

  7. yii2-swiftmailer入门

    1. 安装 用yii 2.0框架,默认会有这个扩展 composer require --prefer-dist yiisoft/yii2-swiftmailer 修改composer.json,re ...

  8. 【vue系列之二】详解vue-cli 2.0配置文件

    上次给大家分享的是用vue-cli快速搭建vue项目,虽然很省时间和精力,但想要真正搞明白,我们还需要对其原理一探究竟. 大家拿到一个项目,要快速上手,正确的思路是这样的: 首先,如果在项目有read ...

  9. Entity Framework相关介绍

    在深入学习某项技术之前,应该努力形成对此技术的总体印象,并了解其基本原理,本文的目的就在于此. 一.理解EF数据模型 EF本质上是一个ORM框架,它需要把对象映射到底层数据库中的表,为此,它使用了三个 ...

  10. C#综合揭秘——细说多线程(二)

    /* 异步写入 FileStream中包含BeginWrite.EndWrite 方法可以启动I/O线程进行异步写入. public override IAsyncResult BeginWrite ...