Java不能单文件编译的原因之一

前言

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 头文件,是否可以解决问题呢。

继续思考

继承是面向对象语言的重要属性之一,但是继承并不是一定要存在的事物,并且需要慎用继承。
是否java之后会被一种只有类(用于对象),与内部类(用于接口实现)的语言所代替,同时使用组合代替继承。此处暂停,陷入困惑,联想到了oc,c语言,c++,想法到此为止,思路因为各种原因无法继续了,
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,681评论 1 114
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,731评论 0 3
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,629评论 4 12
  • 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象是将一类对象的共同特征总结出...
    yshenhn阅读 1,197评论 0 8
  • 今天是连续几天阵雨后的晴天,早晨的太阳慵懒地洒在城市的各个角落。在一所高档酒店门前,夏江已停留了许久,她攒着手...
    早春与树阅读 371评论 0 1