如何使用其他 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 -la
total 32
drwxr-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 Main
main()
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

For classes, only the “public” access specifier can be used on classes. Basically, Java has this “One Class Per File” paradigm. That is, in every java source code file, only one class in the file is public accessible, and that class must have the same name as the file. (For Example, if the file is 〔xyz.java〕, then there must be a class named “xyz” in it, and that is the class that's public.) Optionally, the class can be declared with “public” keyword.

If you use any other access specifier on classes, or declare more than one class “public” in a file, the compiler will complain.

 

也就是说,凡是与 java 文件同名的类,即使不加上 public,他也是 public 类型的。但是这种解释没有 Thinking In Java 中的有说服了,即, 不加 public 前缀的 Class 是 friendly 的,只能在同 package 中可见。

 

 

之所以每个 java 源文件要有一个与文件同名的类,是为了方便编译器查找方便,提高编译速度。

 

若没有任何 public class,则该文件名可以随意起。

 

2. 如何导入其他文件夹的类?

估计和 Python 一样,把目标目录加入搜索路径即可。然后 import。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值