【问题标题】:Programming at compile time or at runtime在编译时或运行时编程
【发布时间】:2014-04-11 21:51:01
【问题描述】:

我已经阅读了许多关于 Java 中编译时间和运行时之间差异的答案。但我仍然不清楚。一些答案说:编译时间是您(开发人员)编译程序或代码的时间。我的问题是我什么时候编译我的程序或代码?例如:我打开我的 IDE、eclipse 或 netbeans,在不同的类中编写代码,然后单击运行按钮,我的应用程序就会打开。有人可以解释一下我什么时候在这个示例过程中编译了我的程序/代码吗?或者我什么时候在这个示例过程中处于编译阶段?

【问题讨论】:

  • 在IDE中编译代码并运行它是由它内部完成的。只需使用CMD运行任何程序你会发现差异并回答
  • 编译时间是您的代码转换为字节码的时间,因此会创建一个“.class”文件。当您单击运行时,会在后台进行编译。
  • @engineer 字节码在 .class 文件中
  • @engineer 不用说对不起亲爱的。没关系
  • @O Connor 你有答案还是有问题?

标签: java compilation compile-time


【解决方案1】:

编写任何java类时,文件扩展名必须是.java。让我们用简单的 java 类来打印 Hello World:

public class Simple {

    public static void main(String[] args) {
        System.out.println("Hello World !!");
    }

}

所以将此文件保存为 Simple.java

现在打开 cmd,假设文件保存在 d:\test 目录中

d:\test>javac Simple.java // 当你运行这个时,.java 被转换成字节码并保存在.class 文件中。

d:\test>java Simple // JVM 将执行字节码文件,即 Simple.class

Note:所有这些过程都是由IDE内部完成的

【讨论】:

  • @O Connor 添加了答案,我想它对你有用
【解决方案2】:

这样做。打开记事本。输入:

  class Sampl{
        public static void main(String []args){
              System.out.println("hi from run time");
        }
  }

另存为Sampl.java

将其保存在没有空格的新文件夹中 - 如果在 linux 上,请说 c:\j\academic 或 ~/j/academic

现在打开一个命令promot,找出你的JDK路径并输入

cd c:\j\学术 目录

应该只看到Sampl.java

javac Sample.java 目录

应该看到 2 个文件: Sampl.java 和 Sampl.class

这是你的字节码

现在您可以移动甚至删除 Sampl.java 并且仍然可以使用命令行从命令行运行 Sampl.class

java -cp 。样品

所以你记事本和 .java 时间就是编码时间。在命令提示符下是编译和运行时间

javac 是 java 编译器

java.exe 是加载和运行我们的类的运行时应用程序

[在运行 jboss 或其他应用程序容器时,我们使用 jboss 主类运行 java,它的类加载并运行我们的类]

这些搜索结果也应该有帮助 google java tutorial command propmpt

【讨论】:

    【解决方案3】:

    有一件非常重要的事情你可能还没有完全理解,即你输入的文本——在这种情况下是一个 Java 程序——并不是 CPU 每秒执行数百万条指令的形式- 对于 Java,哪个是 Java 字节码,需要 JVM 来执行你的程序。

    将您编写的 Java 源代码转换为相应的 Java 字节码,是由所谓的 Java 编译器完成的。编译器并没有什么神奇之处,因为它只是一个可以读取文本并生成相应字节码的程序,并且它是计算机科学专业学生编写的标准作业(但通常适用于比 Java 更小的语言)。

    如果您在标准文本编辑器(而非 IDE)中编写程序并保存到磁盘,则需要通过在 Java 源代码上运行 javac 来手动调用 Java 编译器。 IDE 的优点之一是它们通常会自动进行编译 - 无论是在您保存文件时还是在您想要运行程序时立即进行 - 但它使所发生的事情变得更加神奇。

    (注意:在 IDE 中进行调试时,IDE 中的这个透明编译步骤非常有用,因为它允许更新正在执行的代码,而无需从头开始重新启动调试会话。)

    【讨论】:

      猜你喜欢
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      相关资源
      最近更新 更多