static 與final
1.變量的聲明和記憶體位址的開劈
class A{
}
A a;(這樣沒有開辟記憶體空間,隻有new對象時才有)
static關鍵字
靜态的 :可以用來修飾類,屬性,方法,代碼塊
1.屬性
如果用static來修飾,則變量的記憶體在靜态區。(被共享);
當屬性定義為static則該屬性為該類所有的對象共享,
以最後一次改變為所有對象裡的最終值;
static屬性,又叫類屬性
調用方式:1.可以通過對象調用;
2.可以直接通過類名調用;
2.靜态方法:
static方法中不能調用非靜态屬性
(重寫失去意義)方法如果定義為static ,對象在調用方法的時候隻和對象定義的類型相關
static方法叫做類方法。這一類對象共享的方法;
調用方式:直接用類名調用;
可以通過對象調用
一般情況下。static屬性和方法直接通過類名來調用;
3.代碼塊
public class A()[
public static void main(String[] args){
System.out.println("A");
}
//代碼塊
{
System.out.println("b");
}
//靜态代碼塊
{
System.out.println("c");
}
}
4.類前面。static修飾内部類;
java程式的執行過程!!!!
編寫:.java檔案-->翻譯成.class位元組碼檔案-->執行.class檔案
1首先 .class檔案加載到記憶體中(加載類)
首先加載static屬性,靜态塊,靜态方法(不執行,隻加載);加載到類的記憶體空間
2.執行主函數 在建立這個類的對象時,(再将非靜态的方法,加載到對象的空間裡面),,,,将非靜态代碼塊,非靜态屬性執行
在加載的過程當中,屬性和代碼塊會先執行,方法必先等到調用時在執行;
*****************************************************************************
final關鍵字
final可以用來修飾類,屬性,和方法
final,最終的,不可修改的
類似于C語言裡的const
1.final修飾類的時候,表示該類不可以被繼承
2.final修飾方法時,不可以被重寫,可以重載;
3.final修飾屬性時,必須初始化并且隻能一次,不可以改變值;
class Student {
public final String n;
public Student(){
n="S";
}
}
這樣定義也行,因為構造方法先實行(除了static修飾的方法和屬性之外)
4.final修飾局部變量,定義時可以不指派,但是隻能指派一次;
5.final 修飾參數,在參數前加final,,傳入方法後隻能用,不能改變。。(防止傳入的值被修改;)