## 1.初始化變量

``````class Cat
{
public String name;
public int age = -1;

public Cat(String name, int age)
{
this.name = name;
this.age = age;
}

public Cat()
{
this.name = "Nameless";
}
}``````

age 變量存儲它的初始值。
`` Cat cat = new Cat("Whiskers", 2);``

`` Cat cat = new Cat();``

`Cat cat = new Cat("Whiskers", 2);`這是執行時發生的情況：

• `Cat`創建了一個對象
• 所有實例變量都用它們的初始值初始化
• 調用構造函數並執行其代碼。

## 2.類中變量的初始化順序

``````public class Solution
{
public int a = b + c + 1;
public int b = a + c + 2;
public int c = a + b + 3;
}``````

``````public class Solution
{
public int a;
public int b = a + 2;
public int c = a + b + 3;
}``````

0
0+2
0+2+3

JVM在初始化`a`變量時，會簡單地為int類型賦默認值：0。

## 3.常量

``````public class Cat
{
public final int maxAge = 25;
public final int maxWeight;

public Cat (int weight)
{
this.maxWeight = weight; // Assign an initial value to the constant
}
}``````

## 4.構造函數中的代碼

 ``````class FilePrinter {    public String content;    public FilePrinter(String filename) throws Exception    {      FileInputStream input = new FileInputStream(filename);      byte[] buffer = input.readAllBytes();      this.content = new String(buffer);    }    public void printFile()    {      System.out.println(content);    } }`````` 打開文件讀取流 將文件讀入字節數組 將字節數組保存為字符串 在屏幕上顯示文件內容

``````class Solution
{
}``````

`FilePrinter`構造函數可以拋出檢查異常`FilePrinter`，這意味著如果不將對象包裝在 try-catch 塊中，則無法創建對象。而一個try-catch塊只能寫在一個方法中

## 5.基類構造函數

``````class ParentClass
{
public String a;
public String b;

public ParentClass()
{
}
}

class ChildClass extends ParentClass
{
public String c;
public String d;

public ChildClass()
{
}
}``````

`ChildClass` 繼承`ParentClass`類。

 ``````public class Main {    public static void main(String[] args)    {     ChildClass obj = new ChildClass();    }    public static String print(String text)    {      System.out.println(text);      return text;    } } class ParentClass {    public String a = Main.print("ParentClass.a");    public String b = Main.print("ParentClass.b");    public ParentClass()    {     Main.print("ParentClass.constructor");    } } class ChildClass extends ParentClass {    public String c = Main.print("ChildClass.c");    public String d = Main.print("ChildClass.d");    public ChildClass()    {     Main.print("ChildClass.constructor");    } }`````` 創建`ChildClass`對象 此方法將傳遞的文本寫入控制台並返回它。 聲明`ParentClass`類 Display text 並用它初始化變量。 寫一條消息，說明構造函數已被調用。忽略返回值。 聲明`ChildClass`類 Display text 並用它初始化變量。 寫一條消息，說明構造函數已被調用。忽略返回值。

``````ParentClass.a
ParentClass.b
ParentClass.constructor
ChildClass.c
ChildClass.d
ChildClass.constructor``````