[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
}
}
```