[toc] # final final在不同地方有不同的意思 通常都是禁止一些操作 --- ## final local variable 必需對該變數定義初始值, 不得更改數值 ```java= final int a = 1; // a = 2 // final 變數無法修改 // 不能宣告無初始值的final變數 // final double b; // final Ship s; final Point p = new Point(100, 200); p.setX(200); // 你還是可以呼叫成員方法 // p = new Point(300, 400); // final變數無法修改 ``` --- ## Final Parameter 該parameter在Method中無法更改. ```java= public class Main { public static void main(String[] args) { int i = 1; test(i); } public static int test(final int i) { i = 3; // not allowed System.out.println(i); } } ``` ## Final Method 該Method無法被子類別Override --- ## Final class 該class無法被繼承(extend) --- ## Final Field static: - 必需對該變數定義初始值, 不得更改數值 請盡量用全大寫,底線命名 ```java static final int MAX_HEIGHT = 1080; ``` non-static field: - 初始值可以從constructor提供 但一樣未來無法更改數值 ```java= class Point { private final int x; private final int y; public Point() { this(-1, -1); } public Point(int x, int x) { this.x = x; this.y = y; } /* public void setX(int x, int y) { this.x = x; this.y = y; } */ } public class Main { public static void main(String[] args) { Point p2 = new Point(100, 200); // p2.y = 300; // now allowed } } ```