【问题标题】:Java: define terms initialization, declaration and assignmentJava:定义术语初始化、声明和赋值
【发布时间】:2011-02-06 12:42:55
【问题描述】:

我发现 defs 是循环的,主语是由它们的动词定义的,但动词是未定义的!那么如何定义它们呢?

循环定义

初始化:初始化一个变量。可以在 声明。

赋值:为变量赋值。它可以在任何地方完成,只能使用最终标识符一次。

声明:向变量声明值。

[更新,尝试用 lambda calc 理解主题]

D(x type) = (λx.x is declared with type) 
A(y D(x type)) = (λy.y is assigned to D(x type))

%Then after some beta reductions we get initialization.
D(x type) me human                  // "me" declared with type "human"
A(y (D(x type) me human)) asking    // "asking" assigned to the last declaration

%if the last two statemets are valid, an initialization exists. Right?

【问题讨论】:

标签: java initialization declaration variable-assignment


【解决方案1】:

赋值:丢弃变量的旧值并用新值替换它

初始化:这是一种特殊的赋值:第一个。在初始化之前,对象具有null 值,原始类型具有默认值,例如0false。可以和声明一起做。

声明:声明说明变量的类型及其名称。一个变量只能声明一次。编译器使用它来帮助程序员避免错误,例如将字符串值分配给整数变量。在读取或分配变量之前,必须声明该变量。

【讨论】:

  • 总结?初始化是从一个起始值开始的变化。声明是带有名称和类型的标签。赋值是更一般的值变化,初始化是一种特殊类型的赋值。
  • 正确。初始化之所以特殊,是因为它是变量的第一次赋值
  • 我不认为原语持有 0false 值预初始化,因为当您尝试打印未初始化的变量时,它会产生编译时错误,说明变量可能尚未初始化,而不是打印它们的值。
  • 在 Java 中,如果没有明确的初始化子句,对象的字段会自动初始化为“空”值(null、零或 false)。但是代码块中的局部变量不会自动初始化的,任何尝试读取局部值而不首先向其写入值的尝试都会导致编译-时间错误。有关详细信息,请参阅chapter 16 of the Java Language Specification
【解决方案2】:
String declaration;
String initialization = "initialization";
declaration = "initialization"; //late initialization - will initialize the variable.
    // Without this, for example, in java, you will get a compile-time error if you try 
    // to use this variable.

declaration = "assignment"; // Normal assignment. 
    // Can be done any number of times for a non-final variable

【讨论】:

    【解决方案3】:

    声明不是向变量声明“值”;就是声明变量的类型

    赋值只是将值存储到变量中。

    初始化是在声明时为变量赋值

    这些定义也适用于字段。

    int i;  // simple declaration
    i = 42  // simple assignment
    
    int[] arr = { 1, 2, 3 };
    // declaration with initialization, allows special shorthand syntax for arrays
    
    arr = { 4, 5, 6 }; // doesn't compile, special initializer syntax invalid here
    arr = new int[] { 4, 5, 6 }; // simple assignment, compiles fine
    

    但是,应该提到的是,“初始化”对于“第一次赋值给一个变量”也有一个更宽松的定义,不管它发生在哪里。

    int i; // local variable declaration
    if (something) i = 42;
    System.out.println(i);
      // compile time error: The local variable i may not have been initialized
    

    然而,这可以编译:

    int i; // the following also compiles if i were declared final
    if (something) i = 42;
    else i = 666;
    System.out.println(i);
    

    这里i 可以通过简单的分配从两个可能的位置“初始化”。因此,如果 i 是一个数组,则不能在此构造中使用特殊的数组初始值设定项简写语法。

    所以基本上“初始化”有两种可能的定义,具体取决于上下文:

    • 在最窄的形式中,它是指赋值与声明相结合的情况。
      • 它允许,除其他外,特殊的数组速记初始化语法
    • 更一般地说,它是第一次对变量进行赋值的时候。
      • 除其他外,它允许在多个位置对final 变量进行赋值。
        • 编译器会尽最大努力确保其中一个赋值可以发生,从而“初始化”final 变量

    还有JVM-context类和实例初始化,OOP-context对象初始化等。

    【讨论】:

    • "int[] arr = { 1, 2, 3 };"是 arr-declared 和 {1,2,3}-assignment。它意味着初始化。对吗?
    • 是的,这是使用特殊数组初始化语法的一个例子,所以它是初始化。
    【解决方案4】:

    这里有一些例子的简短解释。

    声明: 声明是当你声明一个带有名字的变量时,一个变量只能声明一次。

    示例:int x;String myName;Boolean myCondition;

    初始化: 初始化是当我们将一个值放入一个变量时,这发生在我们声明一个变量时。

    示例:int x = 7;String myName = "Emi";Boolean myCondition = false;

    作业: 赋值是当我们已经声明或初始化了一个变量,并且我们正在改变这个值。您可以根据需要或需要多次更改变量的值。

    例子:

    int x = 7; x = 12; .......我们只是更改了值。

    String myName = "Emi"; myName = "John" .......我们只是更改了值。

    Boolean myCondition = false; myCondition = true; .......我们只是更改了值。

    注意:在内存中将保存我们最后输入的值。

    【讨论】:

      【解决方案5】:

      声明:每当你定义一个新变量的类型时

      赋值:每当您通过赋予新值来更改变量的值时

      初始化:与声明一起完成的赋值,或者在任何情况下都是对变量完成的第一个赋值,通常是对对象的构造函数调用或对对象的普通赋值变量

      【讨论】:

      • 我无法理解 btw 声明和初始化的区别。
      • 初始化=声明+赋值?
      • 它更像是初始化 = 第一次赋值(对于类字段可以是隐式的,但对于局部变量必须是显式的)
      • 初始化不依赖于赋值。可以初始化未引用的对象。恰好程序员经常在初始化时赋值。初始化是创建一个新对象。
      • @Finbarr:我认为您将初始化与实例化混淆了
      【解决方案6】:

      我来自 C/C++ 背景,但想法应该是一样的。

      声明 - 声明变量时,它告诉编译器留出一块内存并将名称(和变量类型)与其关联。在 C/C++ 中,它可能如下所示:

      int x;
      

      编译器看到这一点并为 x 留出一个地址位置,并知道它应该使用什么方法对 x 执行操作(不同的变量类型将使用不同的访问操作)。这样,当编译器运行到该行时

      x = 3 + 5;
      

      它知道将整数值 8(不是浮点值 8)放入也称为“x”的内存位置。

      赋值 - 这是您将值填充到先前声明的变量中的时候。赋值与“等号”相关联。在前面的示例中,变量“x”被赋值为 8。

      初始化 - 这是当一个变量预设一个值时。不能保证在变量声明期间每个变量都会被设置为某个默认值(除非您明确地这样做)。可以说初始化是变量的第一次赋值,但这并不完全正确,我稍后会解释。典型的初始化是变量声明与赋值的混合,如下所示:

      int x = 6;
      

      在处理常量时,初始化和赋值之间的区别变得更加重要,比如this...

      const int c = 15;
      

      在处理常量时,您只能在声明/初始化时分配它们的值。否则,他们不能被触摸。这是因为常量通常位于程序内存和数据内存中,并且它们的实际分配发生在编译时和运行时。

      【讨论】:

        【解决方案7】:

        第 1 步:声明:int a;

        第二步:初始化:a = 5;

        第 3 步:作业:a = b; (例如: int b = 10 ;现在 a 变为 10)

        【讨论】:

          【解决方案8】:
          Declaration
          When we first create a variable of any Data Type is call Declaration. Example: 
          
          int obj;
          String str;
          
          Initialization
          When (Declaration is completed) or variable is created the assigned any value to this variable is call Initialization. Example 
              int obj = 10;
              String str = "Azam Khan";
          
          Assignment
          Reassign value to that variable that is already initialized is call Assignment. Example
          int obj = 15;
          obj = 20;       // it print **20** value.
          String str = "simple"
          str = "Azam Khan"  // it's result or print **Azam Khan** value...
          

          简单的程序

          class ABC{
          public static void main(String args[]){
          int obj; // this is **Declaration:**
          int  testValue= 12;   // After the **Declaration**, 
          testValue is **Initialize**. 
          testValue = 25;
          System.out.println(textValue);
          }
          } 
          the output result is 25.
          

          它保存了 25 的值。

          【讨论】:

            猜你喜欢
            • 2011-04-15
            • 1970-01-01
            • 2010-10-14
            • 1970-01-01
            • 1970-01-01
            • 2015-12-23
            • 1970-01-01
            • 2023-03-11
            相关资源
            最近更新 更多