当前位置: 首页 > 面试题库 >

为什么包含main的类不必公开?

韶和璧
2023-03-14
问题内容

我宣布了以下课程

class A { //not public
  public static void main(String args[]) {
     System.out.println("done");
 }

当我编译并运行它时,它运行良好并打印输出“ done”。即使我声明它在“ package a”中,也具有相同的行为;

但是,如果JVM规范要求该main方法应该是公开的,因为“否则它就看不到main”,那么它也不适用于该类吗?如果JVM在未声明为public时“看不到”
A.main(),它将如何看到A类本身。

除了“因为规范这样说”以外,对此还有什么解释吗?


问题答案:

JVM始终可以访问应用程序中的每个类,因为它的职责之一是强制执行可见性规则。因此,可以得出一个结论,即如果需要可以忽略可见性规则(例如,当用户启动应用程序时,JVM必须找到入口点main())。

换句话说,JVM不是访问此函数的类,因此可见性不适用。它基本上是监督者,负责从执行到终止的整个过程。

有关参考,请参见执行。



 类似资料:
  • 问题内容: 我写了下面的代码 因此,当我运行它时,它可以正常运行并打印输出“ Hello”。 但是,如果JVM规范要求该main方法应该是公开的,因为“否则它就看不到main”,那么它也不适用于该类吗?如果JVM在未声明为public时“看不到” Hello.main(),它将如何看到类A本身。 除了“因为规范这样说”以外,对此还有什么解释吗? 并且,如果JVM能够看到所有类和方法,因为它本身就是

  • 问题内容: 当具有边距的元素包含在另一个元素中时,父级不会始终包裹/包含该边距。 许多事情将导致父母控制孩子的保证金: (这只是经过一点测试,毫无疑问,还有更多。) 我认为这与利润下降有关,但是: W3C规范页面没有此类行为的描述。 这里没有重叠的边距。 在此问题上,所有浏览器的行为似乎都是一致的。 该行为受到与边距无关的触发器的影响。 根据逻辑,默认元素应包含与溢出设置为自动元素不同的材料? 为

  • 问题内容: 鉴于它明确地是UTC,为什么没有任何时区信息? 我希望这将包含。 问题答案: 这意味着它是时区幼稚的,所以您不能将其与 你可以给它一个时区 现在您可以更改时区 要获取给定时区的当前时间,可以将tzinfo直接传递给: 它适用于任何时区,包括那些遵守夏时制(DST)的时区,即,它适用于在不同时间具有不同utc偏移量(非固定utc偏移量)的时区。请勿使用-如果当地时间不明确,则在DST结束

  • 我试图在RESTAPI中对登录和安全性进行单元测试,所以我尝试尽可能地模拟现实生活中的请求序列。 我的第一个要求是: (请参见pastebin上的完整类)。 我尝试在这里获取cookie,以便以后能够使用收到的CSRF令牌登录,但是数组是空的! 然而,如果我运行我的应用程序并调用 我确实得到了一个Set Cookie头,可以稍后使用该Cookie(和CSRF令牌)进行身份验证。 所以问题是:如何让

  • 我的webpack加载器如下所示: 但尝试包含文件时出错 ./node_modules/css-loader中出错?{“sourceMap”:true,“modules”:true,“importloaders”:1,“localidentname”:“[local]_[hash:base64:3]”}!./node_modules/postcss-loader/lib?{“plugins”:[n