“构造函数声明”和“声明声明”是描述这些声明的正确名称吗?

时间:2019-08-28 14:32:22

标签: java constructor expression variable-declaration jls

我对以下Java语句感到困惑:

ArtClass artClass0 = new ArtClass();
int int3 = 73;
boolean boolean0 = artClass0.foo(int3);

第一个语句称为constructor statement吗?对于第二和第三条语句,它们是否都被视为declaration statements?如果是这样,我如何区分它们?在撰写论文时,我需要区分这两种说法。

3 个答案:

答案 0 :(得分:3)

它们都是Local Variable Declaration Statements,可以简单地写为

<script src="https://cdnjs.cloudflare.com/ajax/libs/rangy/1.3.0/rangy-core.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/rangy/1.3.0/rangy-selectionsaverestore.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/rangy/1.3.0/rangy-textrange.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id='app'>
  <div @beforeinput='storeIndexes' @input='restoreIndexes' contenteditable id='text-with-highlights'>
    Just some text to show the problem.
  </div>  
</div>

我将为您提供the JLS中命名为nonterminals的确切术语。规范中可以找到下面提到的任何非终端。

VariableDeclaratorId [= VariableInitializer]

ArtClass artClass0 = new ArtClass();

[UnannReferenceType [UnannClassOrInterfaceType]] Identifier
     = [Primary [PrimaryNoNewArray [ClassInstanceCreationExpression]]];

 int int3 = 73;

[UnannPrimitiveType [NumericType [IntegralType [int]]]] Identifier
    = [Literal [IntegerLiteral [DecimalIntegerLiteral]]];

boolean boolean0 = artClass0.foo(int3);

答案 1 :(得分:2)

  

第一个语句称为构造函数语句吗?

不,Java中没有这样的术语“构造函数声明” ,至少不是正式的。检查Java Tutorial at Oracle Docs,只有三种类型的语句:

  1. 表达声明
  2. 声明声明
  3. 控制流语句

表达声明可能包含由;得出的以下表达式:

  • 赋值表达式 [例如a = 5]
  • 使用++或- [例如a ++]
  • 方法调用 [例如foo(a)]
  • 对象创建表达式 [例如MyClass myClass = new MyClass()]

当我们声明一个变量时,称为声明语句。

在您的问题示例中,

ArtClass artClass0 = new ArtClass();

以上是一个对象创建表达式,因此我们将其称为表达式语句。另一方面,

int int3 = 73;
boolean boolean0 = artClass0.foo(int3);

在两种情况下,我们都声明变量。因此,它们是声明语句。

但是,请注意以下声明:

int int3; // Declaration Statement
int3 = 73; // Expression Statement
boolean boolean0; // Declaration Statement
boolean0 = artClass0.foo(int3); // Expression Statement

答案 2 :(得分:2)

Java语言的官方术语在Java Language Specification中定义。

所有三个语句均为Local Variable Declaration Statements,但它们的变量初始值设定项使用不同的表达式。具体来说:

如果您希望根据要声明的变量的类型进行区分,则可以说第一个声明了reference type的变量,而其他声明了primitive type的变量(或更具体地说, int”或“ boolean variable”)。