前言
1.一些語言編譯的過程是【編譯】+【鏈接】仅父,如c語言
2.java作為一種后來的語言卻不具備單文件編譯的特性论衍。
3.java本身的特性很多蚁吝,從它的產(chǎn)生思考原因已經(jīng)比較難施流,因此集中于使用黔帕。今天在一些思考與交流中想到一個原因?qū)е耲ava無法單文件編譯某残。
代碼示例
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)方法。此處得到結(jié)論驾锰,java編譯時優(yōu)先尋找子類卸留。
使用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 -> 參數(shù)類型int, V -> 返回值類型void
編譯后的文件中已經(jīng)完全了解自己需要使用的類耻瑟,方法名稱,參數(shù)赏酥,返回值喳整。
以上情況,(1 是 int) 且 (1 is object),單獨編譯時Test.java本身并不足夠知曉自己應該指向怎樣的方法
如果有類似c語言的.h 頭文件裸扶,是否可以解決問題呢框都。