如何使用其他 java 文件里定义的类
在同一个目录下定义两个类:
?
Main.java
?
public class Main{ public static void main(String[] args){ System.out.println("main()"); Person zhongwei = new Person("zhongwei"); System.out.println(zhongwei.name); }}?
Person.java
?
public class Person{ String name; Person(String name){ this.name = name; } } ?
在该目录下执行:
?
javac Main.java?
?
我会看到,该目录下的文件由 2个变为了 4 个:
?
Sun-Zhongweis-MacBook-Pro:test_multi_class zhongwei$ ls -latotal 32drwxr-xr-x 6 zhongwei staff 204 Jun 13 17:43 .drwxr-xr-x 3 zhongwei staff 102 Jun 13 17:19 ..-rw-r--r-- 1 zhongwei staff 510 Jun 13 17:31 Main.class-rw-r--r-- 1 zhongwei staff 203 Jun 13 17:31 Main.java-rw-r--r-- 1 zhongwei staff 269 Jun 13 17:31 Person.class-rw-r--r-- 1 zhongwei staff 98 Jun 13 17:31 Person.java?
执行:
java Main
?
输出为:
?
Sun-Zhongweis-MacBook-Pro:test_multi_class zhongwei$ java Mainmain()zhongwei
?
对比 Python 来看,java 使用同目录下的不同文件的类时,不需要 import 那个文件的名字,直接使用即可。
?
猜测,java 会自动导入一个 path 列表中的所有文件定义的类,而当期目录是默认自动导入的。?
?
几个疑问:
1。类名前的这个 public 的作用?
一个类要在另外一个文件中被调用,定义时一定要加上 public 么?
?
在网上搜到这样一段话:
?
文件名要与public类同名、一个文件只能有一个public类、可以有其它类的声明。不一定非要声明成内部类。不建议一个文件内声明两个类,除非客观需要那样?我修改了一下 Person.java 的代码,将 public 删掉。同时删除之前生产的两个 .class 文件,重新执行 javac Main.java.
再运行 java Main
执行结果同之前的一样。也就是说,不加这个 public 也可以。再去掉 Main.java 中的 public,也没有影响。。。
?
娃哈哈哈哈。。。Google 了半天终于找到一个解释了
?
?写道http://xahlee.org/java-a-day/access_specifiers.html?
也就是说,凡是与 java 文件同名的类,即使不加上 public,他也是 public 类型的。但是这种解释没有 Thinking In Java 中的有说服了,即,?不加 public 前缀的 Class 是 friendly 的,只能在同 package 中可见。
?
?
之所以每个 java 源文件要有一个与文件同名的类,是为了方便编译器查找方便,提高编译速度。
?
若没有任何 public class,则该文件名可以随意起。
?
2. 如何导入其他文件夹的类?
估计和 Python 一样,把目标目录加入搜索路径即可。然后 import。
?