static關鍵字的使用
static關鍵字,用于修飾類的成員,如成員變量,成員方法,以及代碼塊等.
在一個java類中,可以用static 修飾一個成員變量,該變量被稱為靜態(tài)變量,靜態(tài)變量能被所有實例共享.可以使用 類名.變量名的形式來訪問.
static只能用于修飾成員變量,不能用于修飾局部變量,否則編譯報錯!
靜態(tài)方法不需要創(chuàng)建對象就可以調(diào)用,一個靜態(tài)方法中只能訪問static修飾的成員,原因在于沒有被static修飾的成員需要先創(chuàng)建對象才能訪問,而靜態(tài)方法在被調(diào)用時可以不創(chuàng)建任何對象.
靜態(tài)代碼塊:在java類中 使用一對大括號包圍起來的若干行代碼被稱為一個代碼塊,用static關鍵字修飾的代碼塊稱為靜態(tài)代碼塊!當類被加載時,靜態(tài)代碼塊就是會執(zhí)行,由于類 只加載一次, 所以靜態(tài)代碼塊只加載一次!
單例模式
整個程序在運行期間針對該類只存在一個對象
class Demo{
private static Demo ? demo= new Demo( );//設置為靜態(tài) 表示在類加載的同時 就已經(jīng)被創(chuàng)建了!
private ?Demo( ){ }//構造用private修飾 ?不能在外部使用new關鍵字來創(chuàng)建實例對象!
public static Demo getDemo( ){//提供返回該對象的靜態(tài)方法!
return demo;
}
}
class Demo2{
public static void ?main(String[]args){
Demo s1 = Demo.getDemo( );
Demo s2 = Demo.getDemo( );
System.out.println(s1==s2);//輸出結果為true,說明變量s1和s2引用的是同一個對象,而getDemo( )是獲得Demo類對象的唯一方法, 所以Demo類是一個單例類!
}
}
內(nèi)部類
成員內(nèi)部類:
class Outer{
private int num = 4;
class Inner{
void show( ){
syso("num="+num ); }
}}
class test{
public static void main(String[]args){
Outer.Inner ?inner = new Outer( ).new Inner( );
inner.show( )//運行結果是num=4
}
}
靜態(tài)內(nèi)部類:
可以使用static 關鍵字來修飾一個成員內(nèi)部類,該內(nèi)部類被稱作靜態(tài)內(nèi)部類,它可以在不創(chuàng)建外部類對象的情況下被實例化.
格式如下: ? Outer.Inner inner = new Outer.Inner( )
靜態(tài)內(nèi)部類中只能訪問外部類的靜態(tài)成員
在靜態(tài)內(nèi)部類中可以定義靜態(tài)的成員,但是在非靜態(tài)的內(nèi)部類中不允許定義靜態(tài)的成員.
方法內(nèi)部類
是指在成員方法中定義的類,他只能在當前方法中被使用
程序在使用的時候只能在方法內(nèi)部創(chuàng)建該類的實例對象!
class Outer{
private int num= 4;
public void test( ){
class Inner{
void show( ){
syso( "num= " +num);
}
}
Inner inner = new Inner( );
inner.show( );
}
}
class Test{
public static void main(String[]args){
Outer outer = new Outer( );
outer.test( );//輸出結果是num=4
}
}
final關鍵字的使用
final關鍵字可用于修飾類,變量和方法 并賦予其特性:
final修飾的類不能被繼承;
final修飾的方法不能被子類重寫;
final修飾的變量(成員變量和局部變量)是常量,只能賦值一次.(final修飾成員變量時,虛擬機不會對其進行初始化)