final關鍵字的含義
作用:
對於基本類型,final使數值恆定不變。對於對象引用,final使引用恆定不變。一旦引用被初始化指向一個對象,就無法再把它指向另一個對象,然而,對象其本身確實可以被修改的,這句話怎麼理解請看一個Demo。
public class Value {
int i;
public Value(int i) {
this.i = i;
}
import java.util.Random;
public class FinalData {
private static Random rand = new Random();
private String id;
public FinalData(String id) {
this.id = id;
}
private final int valueOne = 9;
private static final int VALUE_TWO = 99;
public static final int VALUE_THREE = 39;
private final int i4 = rand.nextInt(20);
static final int INT_5 = rand.nextInt(20);
private Value v1 = new Value(11);
public final Value v2 = new Value(22);
private static final Value VAL_3 = new Value(33);
private final int[] a = {1, 2, 3, 4 , 5 , 6};
@Override
public String toString() {
return id + "+ "i4= " + i4 + ", INT_5 = " + INT_5;
}
public static void main(String[] args) {
FinalData fd1 = new FinalData("fd1");
fd1.v2.i++;
fd1.v1 = new Value(9);
for (int i = 0; i < fd1.a.length; i++) {
fd1.a[i]++;
}
System.out.println(fd1);
System.out.println("Creating new FinalData");
FinalData fd2 = new FinalData("fd2");
System.out.println(fd1);
System.out.println(fd2);
}
}
輸出:
fd1:i4= 5, INT_5 = 15
Creating new FinalData
fd1:i4= 5, INT_5 = 15
fd2:i4= 7, INT_5 = 15
大家可以看到i4的值在變,爲什麼。因爲final修飾符的真正含義是引用指向的對象不變,但是對象本身的值在初始化的時候卻是可以改變的。因爲初始化對象採用的是隨機數,所以導致對象的值可以改變。這也就是爲什麼常量不僅是final 還是static 的,因爲static表示在裝載時已經被初始化,而且也只會被初始化一次,所以IINT_5的值是不變的
final指定的值必須在域定義處或者每個構造器中用表達式對final進行賦值。
class Peoppet {
private int i;
Peoppet(int ii) {
i = ii;
}
}
public class BlankFinal {
private final int i = 0;
private final int j;
private Peoppet p;
public BlankFinal() {
j = 1;
p = new Peoppet(1);
}
public BlankFinal(int x) {
j = x;
p = new Peoppet(x);
}
public static void main(String[] args) {
new BlankFinal();
new BlankFinal(47);
}
}
如果不在這兩個步驟初始化就會報錯。
不要將final與private合用,因爲無任何意義,一般在方法內使用final處於設計或者效率的原因。
但是在JAVASE5以上就不需要使用final去提高方法的效率,那麼就剩處於將方法設計爲無法修改的目的。
final類是希望沒有任何子類,不希望被繼承。String類就是典型的這種類
static 靜態的
涉及的知識點
(1)靜態代碼塊(執行順序是第一位)
(2)靜態變量
(3)靜態方法(用類可以調出來)
靜態屬性是共享的,在靜態方法中是沒有this對象的
this 當前對象的引用
在JAVA中是依靠引用去判斷是否有些哪些方法,實際使用:
public class Freedom {
private int i;
private String mFood;
private String mWater;
public Freedom(int i, String mFood, String mWater) {
super();
this.i = i;
this.mFood = mFood;
this.mWater = mWater;
}
public Freedom(int i, String mFood) {
this(i, mFood, null);
}
}
運用重載有不同的構造方法,用this可以調用本類的構造方法。同樣可以用this也可以調用本類中的方法進行不同的封裝。
continue與break關鍵字的使用:
for(int i = 0 ; i < 5 ; i++) {
System.out.println("for循環++" + i);
continue;
}
for(int i = 0 ; i < 5 ; i++) {
System.out.println("for循環++" + i);
break;
}
當年在continue下面繼續輸入code,就會提示該code不可到達
1、continue只是該次循環continue後面的code不再執行,而break則是直接跳出當前循環
2、continue必須在一個循環中使用,for循環或者while循環之類使用,而break不僅可以在這種循環中使用也可以在switch以及if中使用,表示退出當前循環或者跳出當前邏輯判斷的邏輯