有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java语言规范是如何创建的

我想问,java是用什么编写的,但我在stackexchange上找到了答案,答案是,您不是用语言编写语言,它是一种规范,但JDK是用C编写的

现在,我的问题是,如果JDK是用C编写的,那么Java基本上是C语言的一种不同形式吗,比如扩展还是什么,添加了更多功能?本规范是如何创建的,这三件事之间的关系是什么:

  • 解释规范的工具(如JDK)
  • 规范本身
  • 创建该工具时使用的语言

共 (1) 个答案

  1. # 1 楼答案

    我想你误解了一些事情,所以让我们先来了解一下基本情况:

    计算机程序只不过是一组由处理器读取然后执行的指令。逐个执行的任务的列表

    Java使用称为Java运行时环境(JRE)的东西。JRE有点像(不完全是)一个虚拟处理器,有自己的指令集,称为java字节码。此“虚拟处理器”在您的操作系统内运行

    Java运行时环境是用某种语言编写的。Sun JRE是用C编写的。C代码反过来被编译成实际处理器的机器代码(因此处理器可以理解代码)

    Java被编译成Java字节码

    因此,为了回答您的问题:规范只不过是对java编程语言的行为和外观的描述。基本上是一个常规的文本文档,你可以用word之类的东西来写

    有了这个规范,程序员可以构建一个编译器。编译器是这样更改java代码的程序:

    for (int i = 2; i < 1000; i++) {
        for (int j = 2; j < i; j++) {
            if (i % j == 0)
                continue outer;
        }
        System.out.println (i);
    }
    

    转换成如下所示的字节码

    0:   iconst_2
    1:   istore_1
    2:   iload_1
    3:   sipush  1000
    6:   if_icmpge       44
    9:   iconst_2
    10:  istore_2
    11:  iload_2
    12:  iload_1
    13:  if_icmpge       31
    16:  iload_1
    17:  iload_2
    18:  irem
    19:  ifne    25
    22:  goto    38
    25:  iinc    2, 1
    28:  goto    11
    31:  getstatic       #84; // Field java/lang/System.out:Ljava/io/PrintStream;
    34:  iload_1
    35:  invokevirtual   #85; // Method java/io/PrintStream.println:(I)V
    38:  iinc    1, 1
    41:  goto    2
    44:  return
    
    <> P>编译程序可以用任何语言编写,但是建议将其编写成C++等低级语言,使编译过程更快。p>