1. 程式人生 > >Java local variables initialize and member initialize

Java local variables initialize and member initialize

1. In the case of a method’s local variables, if you say:

  void f() {
    int i;
    i++;
  }

you’ll get an error message that says that i might not be initialized.

2. member initialize.

case 1: The compiler automatically initialize these values.

// housekeeping/InitialValues.java
// (c)2017 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// Shows default initial values

public class InitialValues {
  boolean t;
  char c;
  byte b;
  short s;
  int i;
  long l;
  float f;
  double d;
  InitialValues reference;

  void printInitialValues() {
    System.out.println("Data type   Initial value");
    System.out.println("boolean     " + t);
    System.out.println("char        [" + c + "]");
    System.out.println("byte        " + b);
    System.out.println("short       " + s);
    System.out.println("int         " + i);
    System.out.println("long        " + l);
    System.out.println("float       " + f);
    System.out.println("double      " + d);
    System.out.println("reference   " + reference);
  }

  public static void main(String[] args) {
    new InitialValues().printInitialValues();
    System.out.println(new InitialValues().c + 1);
  }
}
/* Output:
Data type   Initial value
boolean     false
char        []
byte        0
short       0
int         0
long        0
float       0.0
double      0.0
reference   null
1

*/

The char value is zero, which in my platform(jdk 1.8) char output is [] ( in windows is [ ]).

case 2: The compiler appropriately complains about forward referencing, since it is about the order of initialization and not the way the program is compiled.

// housekeeping/MethodInit3.java
// (c)2017 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
public class MethodInit3 {
  // - int j = g(i); // Illegal forward reference
  int i = f();

  int f() {
    return 11;
  }

  int g(int n) {
    return n * 10;
  }
}

referecnes:

1. On Java 8 - Bruce Eckel

2. https://github.com/wangbingfeng/OnJava8-Examples/blob/master/housekeeping/InitialValues.java

3. https://github.com/wangbingfeng/OnJava8-Examples/blob/master/housekeeping/MethodInit3.java