java里的package理解

今天学java的package的时候

感觉书上写的有点太简略,没法理解package的精髓所在

所以查了一下

发现也没有能让我顿悟的博文

于是自己试了试

过程有点曲折,所以我只说自己对package的理解

首先要理解
如果在某个路径下打开终端
那么该路径就是绝对路径

然后这个绝对路径下呢,你编译一个java文件,恰巧这个java文件里有package p1.p2;

那么电脑就会寻找 绝对路径\p1\p2下的所有需要的类文件

注意,这些类文件里面也必须要有 package p1.p2;

因为这些类文件编译之后生成的字节码 也要从绝对路径走过来

我们做个实验

这个是Student.java

public class Student{
   int number;
   Student(int n){
      number=n;
   } 
   void speak(){
      System.out.println("Student类的包名是tom.jiafei,我的学号:"+number);
   }
}

这个是Example4_15.java

package jiafei;
public class Example4_15 {
   public static void main(String args[]){
      Student stu=new Student(10201);
      stu.speak();
      System.out.println("主类的包名也是tom.jiafei");
   }
}

现在它们都放在tom文件夹下
在这里插入图片描述
此时我们直接编译Example4_15.java肯定会出错的

因为Example4_15.java里面有package jiafei;

所以电脑会寻址到 Tom\jiafei去寻找需要的student类(现在jiafei文件夹是空的)

好的,那你说把Student.java移动到jiafei总可以吧

但是试一试发现也不行

为什么呢?

因为你是在tom文件夹下打开的终端,所以系统编译在jiafei文件夹里的Student.java的时候呢生成的字节码就是没有路径的,也就是默认在tom文件夹起作用

而Example4_15.java需要的是在tom\jiafei起作用的Student.class

所以我们需要在Student.java里加package jiafei;

这样就没问题了

其中我还发现个有意思的东西

如果是用终端去编译Student.java,不论文件里是否用了package,它的字节码都会生成在Student.java所在的文件夹里

而如果用JC去跑一下Student.java,虽然会报错但是它的字节码会生成在package所指向的文件夹里

我觉得可能是读写权限的原因?

不太清楚,但是至少弄懂了package

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值