- 浏览: 313528 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
opalescent_:
学习了。。
java笔试题的整理和解答扩展(String专题) -
yixiao258964:
谢谢,找了好久Reverse Enginee,都说在datab ...
PowerDesigner Reverse Engineer from database-mysql -
javaAlpha:
介绍的真全啊
Java编程那些事儿86——文件操作之File类使用
Java编程那些事儿72——包的概念
陈跃峰
出自:http://blog.csdn.net/mailbomb
8.11 包的概念
随着项目复杂度的增加,一个项目中需要实现的类和接口的数量也将快速增长,为了方便对于代码的管理和阅读,需要将这些类和接口按照一定的规则进行分类,这就是程序设计中命名空间(name space)概念出现的原因。
在Java语言中,为了对同一个项目中的多个类和接口进行分类和管理,专门设计了包(Package)的概念,使用包管理和类和接口。
其实出现包的概念最开始的原因是避免类名重复,现在这个作用也得到了广泛的应用。例如各个公司会为同一个功能实现一套类,这些类名之间大量的存在重复,使用包的概念就可以很方便的解决类名重复的问题。
那么包到底是什么呢?其实包是一个逻辑的概念,就是给类名加了一个前缀,就像北京路这个路名上海和南京都有,再说这个路名时,就可以使用南京市北京路和上海市北京路进行区分,这里的北京路就相当于类,而前面的前缀,如南京市或上海市,就相当于包名。
在物理上包被转换成一个文件夹,操作系统通过文件夹来管理各个类和接口,从而实现对类的分类,或者称之为按照类的功能对这些类进行封装。
下面介绍一下和包有关的两个语法:打包和引入包。
8.11.1 打包
打包的作用就是将声明的类放入包中,也就是为类指定包名。在实际的项目中,一般根据类的功能来设定包,例如设置界面类包,逻辑类包,网络类包等结构。
打包的语法格式为:
package 包名1[.包名2[.包名3……]];
在该语法中,包名可以设置多个,包名和包名之间使用“.”进行分割,包名的个数没有限制。其中前面的包名包含后面的包名。按照Java语言的编码规范,包名所有字母都小写,由于包名将转换为文件夹的名称,所以包名中不能包含特殊字符。
例如:
package test;
package demo.chapter8;
package game.bubble.ui;
在示例中的最后一个,package game.bubble.ui,该包名将转换为路径\game\bubble\ui,也就是前面的包名是后面包名的父目录。
需要特别注意的是:
1、打包的语句必须是程序代码中的第一行可执行代码,也就是说打包语句的上面只能包含空行或注释。
2、打包的语句最多只有一句。
如果在代码中没有书写package语句,则该类将被打入到默认包中,默认包无法被其它的包引用。
示例代码:
//文件名:PackageClass.java
package chapter8;
public class PackageClass{
//类内部的代码
}
通过打包语法,可以为每个类增加一个前缀,也就是说以前使用类,使用类名即可,有了包名的概念以后,类的全名就是包名.类名了,通过在类名前面加入包名,可以使不同包中存在系统的类名,但是一般不建议一个项目中的类名存在重复。
当一个类有了包名以后,在编译和运行时将和前面的操作产生一些变化,下面介绍一下JDK和Eclipse中相关操作的变化。
a)JDK编译和运行打包的源文件
编译源代码的命令:javac –d 类文件路径 源代码名称
例如:javac –d d:\ PackageClass.java
该命令的作用是将PackageClass类编译成class,并将生成的class文件存储到d盘根目录下。则class文件的存储路径是:d:\chapter8\PackageClass.class。使用该命令编译时自动将包名转换为文件夹。
如果想将编译生成的class文件生成在源代码所在的目录,则可以使用如下格式:javac –d . 源文件名
这里的源文件没可以使用*.java代表当前目录下的所有源文件。
说明:执行javac命令必须将目录切换到源代码所在的目录。
运行类文件的格式: java 包名.类名
例如:java chapter8.PackageClass
该命令的作用是运行该类,按照上面的编译命令,运行该程序时,不应该切换到class文件所在的目录,而是切换到最顶层的包名所在的目录,所以执行以上命令时,在控制台下面只需要切换到d盘根目录即可。
b)eclipe编译和运行打包的源代码
在新建源代码时,可以在新建类向导中,可以在package栏中添加包名,在eclipse编译时会自动生成包名的结构。
运行带包名的代码也和以前的运行步骤一样。
需要特别注意的是:在eclipse中,源代码的组织也要求将包名转换为文件夹,否则将出现语法错误,这点在复制代码到eclipse项目中时需要特别小心。
8.11.2 引入包
当类进行了打包操作以后,同一个包内部的类默认引入,当需要使用其它包中的类时,则必须首先引入对应的类,然后才可以使用该类。
引入包的语法格式为:
import 包名1.[.包名2[.包名3……]].类名|*;
在该语法中,import关键字后面是包名,包名和包名之间使用“.”分割,最后为类名或“*”,如果书写类名则代表只引入该类,如果书写星号则代表引入该包中的所有类、接口、异常和错误等。
例如:
import chapter8.*;
import java.io.*;
import chapter8. PackageClass;
引入包的代码书写在类声明语句的上面,打包语句的下面,import语句在一个代码中可以书写任意多句,例如:
package chapter8;
import java.io.*;
import java.net.*;
public class Test{
//其它代码
}
说明:这里的java.io包和java.net包都是JDK中提供的包名。
每引入一个类或接口,将在内存中占有几十个字节的空间,所以使用星号引入一个包中所有的类或接口虽然编写起来比较简单,但是却浪费了一些内存,而一个一个的引入类名编写起来又比较麻烦。
小提示:使用eclipse中的source菜单下的Orgnize Imports可以将星号的引用转换为对类名的引用。
最后需要特别注意的是,import只引入当前包下面的类,而不引入该包下面的子包里面的类。例如:
//文件名:A.java
package a;
public class A{}
//文件名:B.java
package a.b;
public class B{}
//文件名:Test.java
import a.*;
public class Test{
public static void main(String[] args){
B b = new B(); //语法错误,B类未引入
}
}
说明:在该示例的Test类中,使用import a.*;引入了包a中的所有类,也就是类A,而包a的子包a.b中的类将不会被引入,所以在Test类中使用B类将出现语法错误。
8.11.3 包的概念小结
总之,包的概念(也就是命名空间)使得类名冲突的问题获得良好的解决,另外也可以使用包来分类管理一个项目中的多个类,使得项目中的类数量比较多时,结构显得比较清晰。
到现在为止,综合以前学习的所有语法知识,规范的类结构的代码如下:
/*
* 版权信息
*/
打包语句
引入语句
/**
* 类注释
*/
类声明
JDK中的源代码代码(位置在JDK安装目录下的src.zip中)均以这样的格式组织类,这也是规范编写类结构代码的基础。
8.12 总结
面向对象(OO)是一种思想,该思想通过改变数据和功能的组织方式,从而彻底改变了整个项目中代码的结构,也使得每个类的功能单纯,从而极大的降低了项目的复杂度,使得项目开发更方便的进行模块化,从而可以为开发更复杂的项目提供了机会。
本章虽然使用了不少的篇幅来介绍面向对象的知识,但是这些还只是一些基础,更多的知识需要在实际的编程实践中去进行体会。
当掌握了本章的知识以后,就可以比较轻松的去阅读更专业的面向对象知识的书籍,比如面向对象理论以及设计模式相关的书籍,从而提高对于面向对象的认识。
面向对象的知识就介绍这么多,将在下一章中介绍JDK中类文档的使用,并结合文档的使用介绍如何使用JDK中提供的类,从而进入Java开发技术的学习。
发表评论
-
Java编程那些事儿37—for语句语法
2008-06-17 11:53 731Java编程那些事儿37—for语句语法 郑州游戏学院 陈跃 ... -
Java编程那些事儿38—break和continue语句
2008-06-18 15:01 781Java编程那些事儿38—break和continue语句 ... -
Java编程那些事儿39—流程控制综合示例1
2008-06-19 12:30 795Java编程那些事儿39—流程控制综合示例1 郑州游戏学院陈 ... -
Java编程那些事儿40—流程控制综合示例2
2008-06-19 20:23 891Java编程那些事儿40—流程控制综合示例2 郑州游戏学院陈 ... -
Java编程那些事儿41—流程控制综合示例3
2008-06-20 18:06 702<meta http-equiv="Conte ... -
Java编程那些事儿42—流程控制综合练习
2008-06-20 22:13 809Java编程那些事儿42—流程控制综合练习 郑州游戏学院 陈 ... -
Java编程那些事儿57—面向对象基础
2008-07-28 14:15 776Java编程那些事儿57—面向对象基础 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿58—类(一)
2008-07-29 11:05 712Java编程那些事儿58—类(一) 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿59——类(二)
2008-08-04 23:36 696Java编程那些事儿59——类(二) 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿60——对象
2008-08-18 23:49 632Java编程那些事儿60—— ... -
Java编程那些事儿61—面向对象设计方法和面向对象特性(一)
2008-08-29 21:42 755Java编程那些事儿61—面向对象设计方法 郑州游戏学院 陈 ... -
Java编程那些事儿62——继承(二)
2008-09-08 12:11 820Java编程那些事儿62——继承(二) 郑州游戏学院 ... -
Java编程那些事儿63—多态性
2008-09-27 10:31 752Java编程那些事儿63—多态性 郑州游戏学院 陈跃峰 出 ... -
Java编程那些事儿64——访问控制符、修饰符和其它关键字
2008-10-14 14:12 797<meta http-equiv="Conte ... -
Java编程那些事儿65——static修饰符
2008-10-23 15:46 824Java编程那些事儿65——static修饰符 郑州游戏学院 ... -
Java编程那些事儿66——final修饰符
2008-11-11 17:19 729Java编程那些事儿66——f ... -
Java编程那些事儿67——this和super
2008-11-12 12:25 968Java编程那些事儿67——this和super 陈跃峰 ... -
Java编程那些事儿68——抽象类和接口(一)
2008-12-22 11:31 756Java编程那些事儿68—— ... -
Java编程那些事儿69——抽象类和接口(二)
2008-12-27 16:25 980Java编程那些事儿69——抽象类和接口(二) 陈跃峰 ... -
Java编程那些事儿70——抽象类和接口(三)
2009-01-05 14:20 1191Java编程那些事儿70—— ...
相关推荐
本文将围绕《Java编程那些事儿》这本书的部分内容,深入浅出地探讨程序设计的基本概念、Java语言的基础语法及其应用,以及学习程序设计所需的基础条件。 ### 程序设计是什么? **程序设计**,又称编程,是指定义...
**1.1 Java编程那些事儿1——序言** 本章节主要介绍了作者撰写这本书的目的和背景,旨在帮助编程初学者更好地理解和掌握Java编程的基础知识。书中强调了通过通俗易懂的语言来解释复杂的概念,并计划覆盖以下核心...
3. **《JAVA编程那些事儿》电子书**: - 通过讲述真实的编程故事来传授经验和教训,有助于开发者避免常见错误并提高工作效率。 ### 总结 以上资源覆盖了Java编程的各个方面,从基础知识到高级主题,从理论到实践...
【标签】:“java 程序员”标签明确指出了内容的核心——与Java编程语言和Java程序员的工作相关。Java是一种广泛使用的面向对象的编程语言,用于开发跨平台的应用程序,尤其在企业级应用中占有重要地位。 【压缩...
### Java程序员上班那点事儿——理解与解析 #### 前言 《Java程序员上班那点事儿》一书深入探讨了Java程序员职业生涯中的各种实际问题,包括但不限于职业规划、技能匹配、行业现状等方面。本文将从书中提到的核心...
对于Java初学者来说,这是一个理想的实践项目,可以帮助他们更好地理解和应用Web开发的基本概念。静态页面意味着它们是由HTML、CSS和JavaScript等前端技术构建的,不涉及服务器端的交互,如Java JSP(JavaServer ...
标题和描述中的知识点主要围绕着IT行业的核心领域——软件开发,特别是从个人角度出发,探讨了成为一名合格且优秀的程序员所需要具备的素质、态度以及必备的知识体系。以下是对这些知识点的详细解析: ### 一、软件...
机器人教育那些事儿! Penn Apps 2014 年秋季 作者:迪恩·威廉米、索耶·布鲁克斯、卡罗琳·沙利文、克里斯蒂娜·索里斯 TRISHA(Android 上的学校和家庭智能教学机器人)是一款旨在帮助学生学习编程和机器人技术的...
标题中的"flink-1.12.0-bin-scala_2.11.tgz"指的是一款基于Apache Flink的软件发行包,版本号为1.12.0,适用于Scala 2.11环境。这个tgz文件是一个压缩格式,通常用于在Linux或Unix系统中打包和分发软件。在解压后,...
Clojure是一种现代的Lisp方言,运行在Java虚拟机(JVM)之上,也被编译为JavaScript用于浏览器端。由于其函数式编程的特点和并发处理能力,Clojure在构建可靠的、易于扩展的分布式系统方面具有优势。 - AVOSCloud...