Java-import和package的用法

本文出自svtter.github.io 本文可以随意转载,但是转载请保留本信息.

之前一直都是用eclipse开发Java,Vim修炼到今日,本来想要拉出来溜溜Java,奈何package和import的机制以及 synastic[自动检查代码的插件] 没有对于eclipse对java包类似的支持,所以只得滚回eclipse,然后使用vrapper了。

闲话少说,听我细细道来package和import;

这篇文章主要是说明类似这种情况,即不同包但是文件路径一部分相同,即:

  * /temp
      * temp.java
      * tests/
          * joking.java

贴出源代码:

  • test.java:
    package temp;

    import temp.tests.joking;

    public class test {
      public static void main (String args[]) {
      joking a = new joking();
      a.test();
    }
}
  • joking.java
    package temp.tests;

    public class joking {
      int a = 1;
      public void test() {
      System.out.println(a);
    }
  }

一种编译方法

这个时候打开test.java是没有办法通过拼写验证[synastic],需要这样:

javac -d . /tests/joking.java

然后再打开test.java, 可以了。但是这个时候有个很别扭的问题,我们发现这个时候生成了一个文件

temp/temp/tests/joking.class,也就是说我们的目录现在变成了这个样子:

  * /temp
      * temp.java
      * tests/
          * joking.java
      * temp/
          * test/
              * joking.class

请不要告诉我你很爽,因为这个目录给我的感觉很不爽- -试想,如果我们在别的目录下引用这个包,我

们就需要做很多这样的操作,造成的后果就是各个包里面出现无数个temp/test/joking.class

对我而言这是难以忍受的,我也想不太清楚为什么当初java这么设计 — 可能是为了避免耦合等问题?

软件工程这个地方学得不够好,先mark一下,或者有读者可以给我解释一下这个设计。或者说,下面这

个才是正确的。

另一种编译方法

退出到temp的上级目录,然后进行编译

然后这样运行:

可是这个时候我们打开temp.java, 利用synastic检查,报错。

总结

最后还是自己对synastic依赖性太强了。但是自己不会写= =,也是无奈了。开个issue求支持吧= =

后记

找到方法了 — 使用ant来构建项目。不过synastic的官方文档并没有说的很清楚,issue看起来又比较

费劲,饿死了,吃饭去。。


也可以看看