【问题标题】:Are visibility keywords in Java actually methods, like in Ruby?Java中的可见性关键字实际上是方法吗,就像在Ruby中一样?
【发布时间】:2012-03-29 08:29:00
【问题描述】:

正如标题所说,在 Ruby 中,诸如 private、public 等“关键字”实际上是“在类上运行的方法,动态改变方法的可见性”(http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Classes)——这在 Java 中是否相同?

谢谢!

【问题讨论】:

  • 没有。在java中情况并非如此。

标签: java methods keyword


【解决方案1】:

没有。在 Java 中,这映射到 JVM 理解(并强制执行)的字节码中的某些内容。编译器自己也使用它。

加载类时不会发生“动态编译/类操作”,就像在 Ruby 或 Perl 中那样。

【讨论】:

  • 好的,那么“JVM 使用/理解的字节码中的某些东西来修改方法/变量/类”和“修改方法/变量/类的方法”有什么区别?抱歉,如果这听起来有点傲慢,但我目前看不出有什么真正的区别 =/
  • 在 Java 中,您有一个编译器可以创建 JVM 执行的字节码。有字节码来控制类和方法的可见性。在运行时,类按原样从字节码中加载。它不会根据编译器创建的内容进行修改。与 Ruby 相比,没有真正的编译步骤,整个类系统是通过执行一些“元”代码动态创建的。例如,在 Ruby 中,您可以在程序运行时向类添加方法(该过程是创建所有类的方式)。在 Java 中,你不能这样做。都是事先创建好的字节码。
  • 啊,我明白了!感谢您提供详细且解释清楚的答案 - 非常有趣:)
【解决方案2】:

不,在 Java 中它们是“真正的”关键字:修饰符最终出现在生成的字节码中。它们不是方法。

【讨论】:

    【解决方案3】:

    不,他们不是。 Java是一种编译语言,编译器在解析你的代码时会理解这些关键字的特定含义。

    Ruby 不是预先编译的,因此 Ruby 中的类定义实际上是在运行时定义类的可执行语句。这就是为什么访问修饰符实际上是 Ruby 中的运行时方法。 Java 中的类加载完全不同。

    【讨论】:

      猜你喜欢
      • 2014-09-11
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 2021-01-11
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      相关资源
      最近更新 更多