前言
1.一些语言编译的过程是【编译】+【链接】,如c语言
2.java作为一种后来的语言却不具备单文件编译的特性。
3.java本身的特性很多,从它的产生思考原因已经比较难,因此集中于使用。今天在一些思考与交流中想到一个原因导致java无法单文件编译。
代码示例
Util类
public class Util {
    public static void a(Object b) {
        System.out.println("object");
    }
    public static void a(int a) {
        System.out.println("int");
    }
    
}
Test类
public class Test {
    public static void main(String[] args) {
        Util.a(1);
    }
}
可以猜测一下答案是什么?
答案:int
思考:更换int为float,首先寻找a(float a)方法。此处得到结论,java编译时优先寻找子类。
使用javap命令查看Test.class以证明
javap -c Test.class
------------------------------------------------------------------------------------
Compiled from "Test.java"
public class Test {
  public Test();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return
  public static void main(java.lang.String[]);
    Code:
       0: iconst_1
       1: invokestatic  #2                  // Method Util.a:(I)V
       4: return
}
Method Util.a:(I)V: Util -> 类名,a -> 方法名,I -> 参数类型int, V -> 返回值类型void
编译后的文件中已经完全了解自己需要使用的类,方法名称,参数,返回值。
以上情况,(1 是 int) 且 (1 is object),单独编译时Test.java本身并不足够知晓自己应该指向怎样的方法
如果有类似c语言的.h 头文件,是否可以解决问题呢。