Package包的理解、使用

package包的作用:

1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
package的位置: package必须放在import的前面。
java中"包"的引入的主要原因是java本身跨平台特性的需求。实现跨平台的是JVM。

在使用package的时候,如果java文件中使用了package,那么该java文件必须放在命名与package名称相同的目录下,比如:

package test;
 
public class Test {}

该文件的目录结构则为:…test/Test.java
又如:

package com.micheal.test
 
public class Test {}

这当然不是说class命名必须含有和package的命名一样,只是说放在相应的文件夹中
仔细体会下
在这里插入图片描述

java解释器会将package中的.解释为目录分隔符/,也就是说该文件的目录结构为:…com/micheal/test/Test.java
那么package中的类的访问权限是怎么样的呢?在同一package中的类是可以互相访问的,比如:

//Test1.java
 
package test;
 
class Test1 {}
 
//Test2.java
 
package test;
 
public class Test2 {
      public static void main(String[] args) {
            Test1 t;
      }
}

由于Test2与Test1在同一个package-—test中,所以Test2能够直接调用Test1生成Test1的引用变量t;在命令行进行编译时,直接编译Test2.java即可: javac Test2.java(若没有进入Test1和Test2的目录,需在Test2前加上绝对路径)
若类在不同的package中,那么在一个类中要调用另一个package中的类(必须是public类,非public类不支持不同包间访问),需要在类名前明确加上package名称;不过,java中存在一个让java程序员偷懒的特性,叫做import关键字。使用import就可以在一个package中导入另一个package中的类,不过import和C语言和C++中的#include是不同的,import并不会在当前java文件中嵌入另一个package中的类的代码,只是告诉java文件,不属于该包的类能够到哪里去寻找而已:

package p1;
 
//import p2.Test2
 
public class Test1 {
      public static void main(String[] args) {         
          p2.Test2 t;//Test2 t if we import p2.Test2 before;
      }
}

那么问题来了,java文件在编译时如何知道p2这个package在哪?这里要提到一个重要的变量: classpath。
classpath是java在编译程序时查找类文件的路径,java编译器会在classpath中包含有的路径中查找java的类文件。
举个例子,比如说classpath的值 (Windows下)是.(当前目录) ;C:l,那么编译器在查找类的时候,就只会在当前目录和C:/中查找。所以如果p2这个目录与p1在同一目录层次下,那么p2就能直接被查找到了,查找也就结束了;如果不在的话,比如说p1的目录结构是C:ldocument/java/project/p1,p2的目录结构是C:ldocumentjava/test/p2,那么如果C:/documentjavaltest不在classpath中,java解释器是找不到p2这个package的位置的,那么就会提示错误,因此需要将C:ldocument/java/test加入到classpath中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不熬夜,早点睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值