网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.JAVA代码编写的30条建议 选择自 .
.在Oracle快速进行数据行存在性检.
.条件编译变量.
.Applet与Servlet通讯 (片段源码).
.处理 Java 程序中的内存漏洞.
.JScript 的变量.
.JMeter技巧集锦.
.安全技术 Java与安全性,第1部分.
.怎样在J2EE组件中引用和查找Web服.
.JAVA新手必备:Java基础之关键字.
.Java入门——对effectivejava的评.
.怎样用javascript计算两日期间相.
.诊断Java代码:设计“可测试的”.
.使用Netbeans IDE 4.1开发Java应.
.全面接触Java集合框架.
.找出正被调用的方法名.
.J2ME中使用缓存将屏幕内容存储为.
.JDBC里取得Oracle存储过程动态结.
.方便管理plugin或rcp的icons.
.实体 Bean 和 CMP.

完全掌握java中的"包"机制

发表日期:2008-1-5


  "包"机制是Java中特有的,也是java中最基础的知识。一些初学java的朋友,通常象学其它语言一样从教材上copy一些程序来运行,可是却经常碰到莫名其妙的错误提示。这些问题事实上都出在对"包"的原理不够清楚。本文将就此问题进行深入阐述。

  一、为什么java中要有"包"的概念?

  以一言概之,java中"包"的引入的主要原因是java本身跨平台特性的需求。因为java中的所有的资源也是以文件方式组织,这其中主要包含大量的类文件需要组织治理。java中同样采用了目录树形结构。虽然各种常见操作系统平台对文件的治理都是以目录树的形式的组织,但是它们对目录的分隔表达方式不同,为了区别于各种平台,java中采用了"."来分隔目录。

  二、java中包结构和平台的衔接

  java中的资源存在于不同平台下时必然会有很大差异。因此跨平台的java包结构和平台之间必须通过一种方式来衔接到一起。事实上它们就是通过我们很熟悉的classpath的设置来衔接到一起的。举个例子:

  我在Windows2000环境下的classpath设置如下:

  classpath = d:\jdk1.4.2\lib\dt.jar; d:\cjm

  类的衔接关系可以用下图来表达:

完全把握java中的"包"机制

  从图中可以看出,java中的类的组织是"悬空"的,这样的话,它们可以随意放在任意平台下,但是要在该平台下正确找到一个类,则必须使用classpath来设置类所在目录的前面一部分(即区别于平台的部分)。在java中经常把一棵类树压缩成一个.jar文件,如图中的rt.jar,这并不影响对类的查找,在指定环境变量时可以指定.jar文件所在目录,也可以具体指明.jar的完全查找路径,即上例中的classpath中也可描述成:

  classpath = d:\jdk1.4.2\lib; d:\cjm

  当正确设置了平台下的classpath环境变量时,java跨平台的特性就体现出来了。即你在编写程序中,描述一个类时,就不用具体指明它的完整路径,而是仅仅指明java中的类路径就可以了,即指出图1中竖线右边的查找路径就可以了。这样的话,你编写的程序拿到任何平台下时,只需要根据类文件的存放目录来书写相应的classpath环境变量,而不用因为类的存放环境变化而修改程序。

  注重:java中对于某个类的查找是把classpath中的每一项逐一连接,当一个连接能够正确找到相关类后,便不再向后查找。

  三、正确使用"包"

  在使用包的过程中有很多需要注重的小细节,这里把常见的问题都列举如下:

  1、对类路径的设置通常有两种方法:

  i)在系统的环境变量中设置,设置方法依据平台而变;

  ii)以命令参数的形式来设置。

  如:javac -classpath d:\jdk1.4.2\lib d:\cjm\edu\test\TestFile.java
  java -classpath .;d:\jdk1.4.2\lib; d:\cjm  edu.test.TestFile

  注重:i)javac和java命令有很大区别,可以这样区分,javac是一个平台命令,它对具体的平台文件进行操作,要指明被编译的文件路径。而java是一个虚拟机命令,它对类操作,即对类的描述要用点分的描述形式,并且不能加扩展名,还要注重类名的大小写。

  ii)有一个很希奇的问题,即javac命令后面的classpath默认包含当前目录(符合windows的习惯),可是在java命令后面的classpath却不包含当前目录,所以在它的classpath中一定不能忘了加上当前目录的描述,即加上"."。

  2、在java程序中对类路径的描述用"."分隔,而且也有当前目录的概念。如要运行图1中的TestFile必须指明为 edu.test.TestFile。但是假如在类TestFile中要调用和它在同一目录中的TestString,则不必指明目录前缀。

  3、在java程序中所有使用到的类都应该清楚的指明这个类的查找路径。一般有两种方法指明:

  i)在程序的开始使用import要害字指明。如类TestFile中要用到FileInputStream类,则在程序头中加入import java.io.FileReader; 或import java.io.*;

  ii)在程序中用到FileFileReader类处直接写完整路径,如: java.io.FileFileReader fin = new java.io.FileReader("filename");

  注重:java.lang包总是被默认导入的。

  4、类的目录结构一定要和类中第一句"包声明"一致。如类TestFile.class对应的.java文件的第一句必须包含:package edu.test;

  确保类的存放路径和类中指明的"包路径"一致的方法一般有两种:

  i)编写.java文件时存放的目录事先确定好,如TestFile.java就直接放在edu\test目录下,然后用下面的语句编译:

  javac  -classpath d:\jdk1.4.2\lib d:\cjm\edu\test\TestFile.java
当编译完成后,产生的TestFile.class文件会出现在编译命令中java文件的描述路径中。即出现在d:\test\edu\test中


上一篇:Java学习路径(二)书籍篇 人气:510
下一篇:有关有效使用final关键字的准则 人气:735
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐