为什么编译器需要.java后缀而解释器不需要.class后缀?

2024-01-07

编译 Foo.java:javac Foo.java

运行程序:java Foo

为什么编译器需要.java后缀但解释器不需要.class suffix?


正如其他几个答案所解释的那样,Java 编译器采用文件名作为参数,而解释器采用类名。所以你给.java编译器的扩展名,因为它是文件名的一部分,但您不会将其提供给解释器,因为它不是类名的一部分。

但是,您可能会想,为什么他们不以不同的方式设计 Java 解释器,以便它采用文件名呢?答案是类并不总是从.class文件。有时它们来自 JAR 档案,有时它们来自来自网络 http://docs.oracle.com/javase/7/docs/api/java/net/URLClassLoader.html,有时它们是由程序即时构建的,等等。类可以来自任何可以提供所需二进制数据的源定义它 http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#defineClass%28java.lang.String%2C%20byte%5B%5D%2C%20int%2C%20int%29。也许同一个类可能有来自不同来源的不同实现,例如,程序可能会尝试从 URL 加载某个类的最新版本,但如果失败,则会回退到本地文件。 Java 的设计者认为,当您尝试运行一个程序时,您不必担心必须追踪定义您正在运行的类的源代码。你只需给出完全限定的类名并让 Java(或者更确切地说,它的ClassLoaders) 努力寻找它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么编译器需要.java后缀而解释器不需要.class后缀? 的相关文章

随机推荐

  • SQL Server 2012 中的编号岛

    我需要对 SQL Server 2012 中的岛屿进行编号 岛屿被定义为一组行 其中之间没有天数间隔DateFrom and DateTo同一内ItemId 以下数据集 CREATE TABLE Ranges ItemId INT Date
  • Applescript Mojave 切换辅助功能灰度开/关

    我有一个定期运行的脚本 用于使用 Applescript 打开 关闭灰度 它在 High Sierra 上运行良好 但当我在 Mojave 使用它时抛出异常 tell application System Preferences revea
  • Gradle无法解析库中的所有依赖项、自定义maven url

    我正在使用 Crashlytics 它提供了自定义 Maven url 我正在尝试将 Crashlytics 代码移至库中 图书馆build gradle文件如下 buildscript repositories mavenCentral
  • 如何使用 kubeadm 从 master 故障中恢复

    我使用以下命令设置了一个具有单个主节点和两个工作节点的 Kubernetes 集群kubeadm 我正在尝试找出如何从节点故障中恢复 当工作节点发生故障时 恢复非常简单 我从头开始创建一个新的工作节点 运行kubeadm join 一切都很
  • DUnit:如何运行测试?

    我怎么跑TestCase来自 IDE 我创建了一个新项目 具有单一 简单的形式 unit Unit1 interface uses Windows Messages SysUtils Classes Graphics Controls Fo
  • 将rules.csv文件导入声纳

    我有一个 ms excel 格式的文件rules csv Rules csv 是从其他声纳服务器的质量配置文件下载的 现在我想以相同的质量配置文件实现我的声纳 现在我的问题是 如何将csv文件导入声纳 rules csv 文件足以创建与其他
  • SSRS 对多个数据集和子报告的值求和

    我的 SSRS 主报告中有两个数据集和一个子报告 我需要创建第三个 总计表或矩阵 从每个数据集和子报告中返回一个字段 它看起来像这样 开始 首先 我构建了一个表并添加了一列以使用以下值进行测试 这是在总计行中 每个元素单独位于各自的行中 R
  • PLinq 本质上比 System.Threading.Tasks.Parallel.ForEach 更快

    Summary 我从 System Threading Tasks Parallel ForEach 和并发数据结构更改为简单的 plinq 并行 Linq 查询 速度是amazing 那么 plinq 本质上比 Parallel ForE
  • 我在哪里可以找到(并运行)使用 cabal 沙箱编译的可执行文件?

    我正在编译我的myProgram lhs使用阴谋集团沙箱 设置为cabal sandbox init 我正在使用我想出的最简单的方法 cabal exec ghc myProgram 或者 有一个规则Makefile cabal exec
  • libgdx 游戏无法在 Android 手机上运行

    我正在尝试从这个基于 libgdx 的游戏构建 Android 游戏 但是当将我下载的 libgdx 代码移植到 Android 游戏时 Android 应用程序会崩溃http rengelbert com blog downloads f
  • Java套接字不会在死套接字上抛出异常?

    我们的移动设备和服务器之间有一个简单的客户端服务器架构 两者都是用 Java 编写的 一个极其简单的ServerSocket和Socket实现 然而一个问题是 当客户端突然终止 没有正确关闭套接字 时 服务器不知道它已断开连接 此外 服务器
  • 大方形 WordPress 帖子缩略图

    有人知道如何获得方形的 WordPress 缩略图吗 如果我使用这个图像不是方形的 但如果我这样做 它们是正方形的 我需要创建一个缩略图库 其中包含 300 x 300 的方形图像 您必须首先创建自己的图片尺寸 这是通过添加图像大小 htt
  • 当激活默认拒绝时,Spring Security ROLE_ANONYMOUS 不起作用

    我启用了安全性的默认拒绝功能 有了这个 我想在某些控制器上提供匿名访问 为此 我启用了匿名身份验证 如果我使用antmacher permitAll 工作正常 但如果我正在使用 PreAuthorize value hasRole ROLE
  • 如何在 CALayer 上获取触摸事件?

    我是 iPhone SDK 的新手 现在我正在使用我非常喜欢的 CALayers 进行编程 不像 UIViews 那么昂贵 并且比 OpenGL ES sprites 的代码少得多 我有这个问题 是否可以在 CALayer 上获取触摸事件
  • 如何在VS 2010中禁用缩进虚线

    在每个缩进上看到这些虚线 我该如何关闭它 我一定是不小心按下了某个键盘快捷键 但我在设置中找不到它 抱歉 这是一个非常愚蠢的问题 但这些话真的让我很困扰 我不知道还能转向哪里 通过以下方式打开 关闭它 编辑 gt 高级 gt 查看空白 Th
  • Ruby 中对数组中的集合进行平均的最佳方法是什么?

    给定以下简单数据集 对 0 25 53 和 80 组的值进行平均的最佳方法是什么 0 148 5 0 146 5 0 148 6 0 202 3 25 145 7 25 145 5 25 147 4 25 147 3 53 150 4 53
  • 有哪些大型网站正在使用 Amazon EC2 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在寻找托管在 Amazon EC2 S3 Cloudfront 等上的大型网站的示例 我在一家公司工作 我们运行一个网站 该网站每月在运行 10
  • Delphi中如何检测打印机型号?

    当我插入 HP Laserjet 3015 时 Windows 会检测到正确的型号 然后尝试安装适当的驱动程序 如何检测所连接打印机的型号 我不想使用已安装打印机的列表 因为 Zebra 打印机可以使用通用 纯文本驱动程序进行安装 我是一名
  • OAuth (Instagram) 无需刷新

    我有一个单页 JavaScript 应用程序 我想知道是否可以在不刷新页面的情况下对 Instagram 上的用户进行身份验证 我想尝试使用 javascript 执行类似于 Facebook 连接的操作 其中 Facebook 对话框在弹
  • 为什么编译器需要.java后缀而解释器不需要.class后缀?

    编译 Foo java javac Foo java 运行程序 java Foo 为什么编译器需要 java后缀但解释器不需要 class suffix 正如其他几个答案所解释的那样 Java 编译器采用文件名作为参数 而解释器采用类名 所