【问题标题】:Operations available outside of a method block [closed]方法块之外可用的操作[关闭]
【发布时间】:2018-09-15 06:43:48
【问题描述】:

什么是包含在类中而不包含在java中调用的任何方法或块中的区域?

我们可以在这里进行哪些操作?

java中有全局的概念吗?

【问题讨论】:

  • 欢迎堆栈溢出。您可能想查看我们的 how to ask 页面,以获取有关如何以可能为您提供最大帮助的方式格式化问题的一些帮助。
  • 那是你声明类属性(变量)的地方
  • 你描述的是一个字段声明。它在JLS §8.3 中有描述。我不确定你所说的“操作”是什么意思......
  • 1) 它没有名字。 2) 您可以做的唯一操作是初始化一个变量,作为变量声明的一部分。 3) 没有。但是 - 如果您正在尝试学习 Java,那么建议您花时间阅读 Oracle Java 教程 ... 或教科书。
  • 你能举个例子吗? Java 文档中没有您对它有什么不理解的地方?

标签: java object


【解决方案1】:

Java 没有“全局”的概念。类有自己的主要作用域,即顶级作用域。您只能声明类成员字段(类变量或在某些语言(如 python、kotlin、c#、c++ 等)中调用的属性)或方法、构造函数、静态块或内部类。访问它们的唯一方法是它们是否可见并且声明为静态或通过实例访问。

【讨论】:

  • 虽然有“单身人士”。不确定您是否可以称其为“全球”
  • 不要忘记实例初始化块。
  • @cricket_007 不确定您的意思。单例是在整个程序生命周期中只有一个实例的类。
  • @the Spider “实例初始化块”是什么意思?你是说构造函数?编辑:查找“即时初始化程序”并且不知道它存在。它可能与标签相同的情况,没有多少人知道它们只是因为不再需要它们,对吧?
  • 取决于你问谁。它们对于在 ctor 之间共享代码很有用。它们也出现在double brace initialisation(可怕的反模式)中——尽管我希望没有人真正使用它。
【解决方案2】:

如您所见,您可以声明方法。您还可以声明/初始化字段、构造函数、嵌套接口和类;以及静态和实例初始化块。

该区域称为类体


JLS §8.1.6

类主体可能包含类成员的声明,即字段(第 8.3 节)、方法(第 8.4 节)、类(第 8.5 节)和接口(第 8.5 节)。

类主体还可以包含实例初始化程序(第 8.6 节)、静态初始化程序(第 8.7 节)和类的构造函数声明(第 8.8 节)。

【讨论】:

    【解决方案3】:

    没有全局的概念或任何关键字,但是您选择的类中的公共静态变量可以有效地用作全局变量(可从代码中的任何位置访问)。

    正如 cmets 中已经提到的,java 中经常使用的一个概念来执行“全局”o 唯一操作,它是一个单例(设计模式)——一个只能有一个实例的类(你只能使用它的构造函数一次) .该实例存储在其类的静态字段中,因此在某种程度上使用了我已经提到的技巧(可通过 getter 访问,而不是 public 访问)。

    我不知道 Java 中类内部的确切名称,但您在那里所做的主要是声明字段和子类(当然还有方法,但您已经提到过)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 2020-06-09
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 2020-01-05
      • 2022-01-06
      相关资源
      最近更新 更多