已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
包(package)作用:为了更好的组织类,Java提供了包机制。包是类的容器,包(package)用于将完成不同功能的类分类,放在不同的目录(包)下。包的命名包的名字有层次关系,各层之间以点分隔。包层次必须与Java开发系统的文件系统结构相同。程序员可以使用package指明源文件中的类属于哪个具体的包。定义一个包的语法格式为:package pkg1.pkg2.pkg3包的命名规则:包名第一个字母要小写。把类定义在某个包下面,一般在源文件开头加上package pkg1_包名;则类的全名是pkg1_包名.类名如果定义类的时候没有使用package指定包名,则Java认为类位于默认包里面(default package)。编译执行如果程序中声明了包名,即首行写了package com.xxx;那么如果按照一般的编译方式 javac 源文件名.java会在当前目录下生成class文件。然后直接用:java源文件名执行,则会报错。出现java.lang.NoClassDefFoundError产生问题的原因包的意义在于产生一种目录结构,所以class文件必须位于相应的目录层次结构中。以package com.xxx为例:解决方案一种解决方式是手工建立com文件夹,里面建立xxx文件夹,把生成的class文件放在目录结构中,并且执行的时候采用java 完整类名(即带上包名)才能够执行。 Java 中带包的类的编译与执行 以HelloWorld.java 为例( 假设该文件的位置是/home/HelloWorld.java):java view plaincopyprint?1. packagea.b;2. publicclassHelloWorld3. publicstaticvoidmain(Stringargs)4. System.out.println(HelloWorld!);5. 6. 下面根据不同的编译方法来讨论:第一种编译方法( 编译直接生成class 文件,执行需先创建包的路径)假设当前目录为/src/java/ ,则编译命令为:javac HelloWorld.java 补充: javac 工具读取用 Java 编程语言编写的类和接口定义,并将它们编译成字节码类文件。缺省情况下,编译器将每个类文件与其源文件放在同一目录中。 此处使用缺省的javac则编译完后产生的类文件(.class文件)会在与源文件(.java文件)在同一目录下,此时编译不会产生a目录、b目录。 假设当前目录为/src/ ,则编译命令为:javac /src/java/HelloWorld.java 或者使用相对路径:javac java/HelloWorld.java 执行完该命令后, 在/src/java/ 目录下生成一个HelloWorld.class 文件。执行文件(在java 目录下新建目录a ,在a 目录下新建目录b 将HelloWorld.class 至于b 目录下;执行java a.b.HelloWorld ),必须要按照包的结构先创建目录。第二种编译方法( 编译直接生成包的路径)假设当前目录为/src/java/ ,则编译命令为:javac -d . HelloWorld.java 补充:javac -d . *.java 命令中的 “-d”则是设置类文件的目标目录。如果某个类是一个包的组成部分,则 javac 将把该类文件放入反映包名的子目录中,必要时创建目录。 在此处会自动创建c目录、d目录。在d目录下生成编译后的类文件(HelloWorld.class ) 。说明:. 为指定编译路径为当前目录;生成的HelloWorld.class 所有目录为/src/java/a/b/HelloWorld.class 。javac -d c/d HelloWorld.java说明:c/d 为指定编译路径为/src/java/c/d ,同样也可以写成绝对路径如javac -d d:/ HelloWorld.java ,前提是路径必须先存在;生成的HelloWorld.class 所有目录为/src/java/c/d/a/b /HelloWorld.class 。假设当前目录为/src/ ,则编译命令为:javac -d . java/HelloWorld.java说明:生成的HelloWorld.class 所有目录为/src/a/b/HelloWorld.class 。javac -d java/c/d java/HelloWorld.java 说明:生成的HelloWorld.class 所有目录为/src/java/a/b/HelloWorld.class 。第三种编译方法(先把源文件按照包结构放到指定的目录中,然后执行编译命令)假设当前目录为/src/java/,先在目录中创建目录/a/b,然后编译命令:javac a/b/HelloWorld.java下面总结一下对于带包的类进行编译和执行时的一些要点:1、编译时可以不考虑包结构的问题,不论用哪种方法,其实本质都是一样的,只需要让javac命令找到所需要编译的原文件(*.java)即可。编译时可以用相对或者绝对路径来为javac命令提供源文件的位置信息。2、 初学者易混淆classpath的作用,对于java命令的-cp选项和javac命令的-classpath选项,以及配置环境变量时的 CLASSPATH.其作用是不变的:都是指定所需要的class文件的位置。所不同的是,执行javac编译时的-classpath选项用于指定被编 译的源文件需要调用另外的用户自定义类的位置.。执行java命令是根据classpath来寻找所需要执行的class文件的位置;而javac命令不 能根据classpath来找源文件,只能根据classpath来寻找所需要用到的类。 下面举例来说明该问题:假设以下代码(位置:/src/java/code/a/b/TestT.java):java view plaincopyprint?1. packagea.b;2. importc.d.T;3. publicclassTestT4. publicstaticvoidmain(Stringargs)5. Tt=newT();6. t.p();7. 8. 引入的文件(位置:/src/java/code/tmp/c/d/T.java)java view plaincopyprint?1. packagec.d;2. publicclassT3. publicvoidp()4. System.out.println(class:T);5. 6. 假设现在编译两个文件(目录:/src/java/),则编译命令为:javac -classpath code/tmp code/a/b/TestT.java 执行命令为:java -cp code;code/tmp a/b/TestT如果当前目录为:/src/java/code/,则编译命令为:javac -classpath tmp a/b/TestT.java执行命令为:java -cp .;tmp a/b/TestT 假设现在编译不同磁盘的三个文件(目录:e:/src/java/),则编译命令为:假设以下代码(位置:e:/src/java/code/a/b/TestT.java):java view plaincopyprint?1. packagea.b;2. importc.d.T;3. importe.f.T1;4. publicclassTestT5. publicstaticvoidmain(Stringargs)6. Tt=newT();7. t.p();8. T1t1=newT1();9. t1.p();10. 11. 引入的文件1(位置:d:/java/code/tmp/c/d/T.java)java view plaincopyprint?1. packagec.d;2. publicclassT3. publicvoidp()4. System.out.println(class:T);5. 6. 引入的文件2(位置:c:/code/tmp/e/f/T1.java)java view plaincopyprint?1. packagee.f;2. publicclassT13. publicvoidp()4. System.out.println(class:T1);5. 6. 如果当前目录为:e:/src/java/编译命令为:javac -classpath d:/java/code/tmp;c:/code/tmp code/a/b/TestT.java执行命令为:java -cp code;d:/java/code/tmp;c:/code/tmp a/b/TestT说明:javac命令中的classpath必须指定引入类的路径;同样java命令中的cp必须引入引入类的class的路径也需指定执行类的路径子包有两个包名,分别是aa.bb.cc与aa.bb.cc.dd,那么我们称后者为前者的子包。导入导入(import),将使用package分离的各个类导入回来,让编译器能够找到所需要的类。使用在同一个包下的类不需要导入可以直接用,使用不同的包下的类才需要导入。使用格式:import aaa.bbb.ccc;可以使用通配符“*”代替类名,将包中的所有类导入:import aaa.bbb.*;注意:import aaa.bbb.*;并不会导入import aaa.bbb.ccc包下面的类。 顺序问题关于package、import、class的顺序问题:1.首先需要定义包(package),可选;2.接下来使用import进行导入,可选;3.c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 起草协议书的英文
- 汽车的租赁协议书
- 2025年RISC-VJTAG接口应用考核试卷
- MySQL协议书化木马
- 社保欠费免责协议书
- 志愿服务协议书包括
- 2025年医疗供应链系统集成项目整体管理与敏捷开发应用考核试卷
- 2025年供应链管理行业供应链数字化转型与物流智能化技术研究报告及未来发展趋势预测
- 2025年农业机械防盗与停放安全规范考核试卷
- 2025年农业智能收获技术研发农业科技创新资格考核试卷
- 公司技术部奖罚管理制度
- 就餐安全课件
- 电网技术改造及检修工程定额和费用计算规定2020 年版答疑汇编2022
- 食管癌放疗后护理措施
- 国民经济行业分类代码(2024年版)
- 影视制作行业编剧经验证明书(8篇)
- 身体调养协议书模板
- 《缺血性卒中脑细胞保护临床实践中国专家共识(2025年版)》解读
- 儿童舌诊课件
- 房屋市政工程施工现场安全风险分级管控与防范措施清单
- 怎样做好肿瘤科护理质控
评论
0/150
提交评论