理解Java包
本质上,包是一个唯一命名的类的集合,将类集合到包里面的主要原因,是为了当在应用程序中使用预先编写的类时避免与类自身可能引起的明明冲突。用于包中的类名不会妨碍另一个包或程序中的类名,因为此时,包中的类名都是通过报名加以限定的。举个栗子!٩(๑>◡<๑)۶,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包的更多相关文章
- 理解Java中【包】的概念
Java中用package关键字定义一个包,下面通过几个实验,理解Java中的包的概念和作用. 实验1:先看一个无包的情形 在G盘下新建一个Test.java,如图1: 写下面这些代码 <spa ...
- 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具
上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...
- java笔记--理解java类加载器以及ClassLoader类
类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...
- 深入理解Java:注解
注解作用:每当你创建描述符性质的类或者接口时,一旦其中包含重复性的工作,就可以考虑使用注解来简化与自动化该过程. Java提供了四种元注解,专门负责新注解的创建工作. 元注解 元注解的作用就是负责注解 ...
- java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- (3) 深入理解Java Class文件格式(二)
好文转载:http://blog.csdn.net/zhangjg_blog/article/details/21487287 在上一篇文章 深入理解Java Class文件格式(一) 中, 介绍了c ...
- 【Todo】【转载】深入理解Java内存模型
提纲挈领地说一下Java内存模型: 什么是Java内存模型 Java内存模型定义了一种多线程访问Java内存的规范.Java内存模型要完整讲不是这里几句话能说清楚的,我简单总结一下Java内存模型的几 ...
- [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...
随机推荐
- .NET 动态脚本语言
Script.NET (S#) 是一种允许为你的应用程序自定义行为,与本地.NET对象.类型和组件交互动态的脚本语言.托管应用程序本身可以改变一个xml配置脚本运行时的默认行为,更换绑定的方法,属性, ...
- IE无法获得cookie,ie不支持cookie的解决办法,火狐支持
发现用自己的电脑 IE7.0总是无法正常登录,别的电脑都可以. 每次登录后又被重定向回了登录页面. 可换成Firefox和google chrome 却一切OK,后来还把浏览器升级到IE8.0 问题依 ...
- 【译】Yarn上常驻Spark-Streaming程序调优
作者从容错.性能等方面优化了长时间运行在yarn上的spark-Streaming作业 对于长时间运行的Spark Streaming作业,一旦提交到YARN群集便需要永久运行,直到有意停止.任何中断 ...
- C++拷贝构造函数专题
C++拷贝构造函数 在定义任何C++类时,拷贝空置操作都是必要部分,类需要控制拷贝.赋值和销毁对象时发生的行为.拷贝构造函数的用途:当创建了一个新对象时,可以用另一个对象的数据初始化这个新建的对象. ...
- 【原】Spark 编程指南
尊重原创,注重版权,转贴请注明原文地址:http://www.cnblogs.com/vincent-hv/p/3322966.html 1.配置程序使用资源: System.setPropert ...
- 126邮箱发送邮件python实现
126邮箱发送邮件python实现 from email.mime.text import MIMEText from email.utils import formataddr import smt ...
- JavaWeb(三)JSP概述
一.JSP概述 1.1.JSP简介 一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束.JSP是一种Java servlet,主要用于实现 ...
- Java面向对象 IO (二)
Java面向对象 IO (二) 知识概要: (1)字节流概述 (2)字节流复制图片 (3)IO流(读取键盘录入) (4)读取转换流,写入转换流 字节流概述 ...
- javascript 三种弹出对话框
第一种:alert()方法 第二种:confirm()方法 返回一个布尔值,根据返回的值可以执行相应操作. 第三种: prompt()方法 返回输入的消息,或者其默认值提示框经常用于提示用户在进入页面 ...
- sqlserver游标使用和循环
/*** 游标的使用 讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱. 使用游标的顺序: 声名游标.打开游标.读取数据.关闭游标.删除游标. 1.3.1声明游标 最简单游标声明:DECLA ...