Java包

所有的类必须放在包里

在Java程序中,包的主要作用是将不同功能的文件进行分割。

在之前的代码开发中,所有编译后的.*class文件都保存在同一个目录中,这样以来会带来一个问题:如果出现了同名文件,就会发生文件覆盖问题,因为同一个目录中不允许有同名文件。

而想解决同名文件冲突的问题,就必须设置不同的目录。
所谓的包实际上指的就是文件夹。

在Java中实用package来定义包,此语句必须写在文件的首行。

例如当一个Hello程序定义在了一个com.hello.world的包中,“.”表示子目录
当程序中出现了包的定义后,如果再编译程序,就必须使生成的Hello.class文件保存在指定的目录下(此时应该保存在com\hello\world目录下,与包名称结构相同)

打包编译:javac -d .Hello.java;
“-d” :生成目录,根据package的定义生成
“.” :设置保存的路径,如果为“.” 表示在当前所在路径生成
在解释程序的时候不要进入包里面,应该在包外输入类 的完整名称(包.类)
输入: java com.hello.world.Hello


包的导入

不同包之间进行访问,此时就需要包的导入,使用 import

在使用导入包之后,程序在逐个编译的时候有一个编译顺序的问题
即被导入的包要先进行编译

但是在大型开发中,一般会使用开发工具进行代码编写,这个顺序不用考虑
而且java提供了通配符“ * ”操作:javac -d . *.java 这样就会自动根据代码的调用顺序进行程序编译

进行外包访问的时候,只能访问public class
如果一个类没有使用public class声明,那么这个类只能在一个包中访问,而外包无法访问。

public class :文件名称必须与类名称保持一致,在一个*.class文件里面只能有一个public class 声明,如果一个类需要被外包访问,那么一定要定义为public class

class:文件名称可以与类名称不同,并且一个.java文件里面可以有多个class定义,编译后会形成多个 .class文件,如果一个类使用的是class定义,那么表示这个类只能被本包访问。

在实际的开发中,绝大多数情况只会在一个 *.java文件里面定义一个类,并且类的声明绝大多数使用的都是public class完成的

导入包中的多个类,使用 import com.hello.world.* 简化导入操作
在这个操作中不用考虑性能的问题,和普通导入是一样的


不同包里面的同名类问题

既然有导入包的操作,那么不同的包里面很有可能有同名类
在发生类名称冲突时一定要写生类的完整名称,即 包名.类名


jar命令

任何一个项目里一定会存在大量的 .class 文件,如果将这些 .class 文件直接交给用户使用,就会造成文件过多,并且会导致程序没有结构。所以在交付用户使用之前,会使用jar命令针对 *.class 文件进行压缩,最终交付用户使用的往往是Java归档(JavaArchive,jar)文件。

jar操作往往使用3个参数
-c :创建一个新的文件
-v :生成标准的压缩信息
-f :由用户自己指定一个 *.jar文件名称

定义完程序类后,打包编译此文件。此后会形成“包.类” 的形式,随后假设这里边有很多的 *.class 文件,并且要交付用户使用,那么将这个包的代码压缩,输入:
“ jar -cvf my.jar com ”,这样就会将生成的com目录(包的根名称)打包成一个压缩的jar文件。生成的my.jar文件不能直接使用,必须配置CLASSPATH才可以被其他程序类加载

SET CLASSPATH = .;E:\mydemo.jar (这个是在命令行中配置,也可以在环境变量中配置)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值