java學習筆記(三)java中的修飾符abstract、static與final

一、四種訪問級別的訪問範圍

訪問級別 訪問修飾符 同類 同包 子類 不同的包
公開 public 微笑 微笑 微笑 微笑
受保護 protected 微笑 微笑 微笑 發火
默認 沒有訪問修飾符 微笑 微笑 發火 發火
私有的 private 微笑 微笑 發火 發火

二、使用abstract修飾符需要遵守的語法規則

1、抽象類中可以沒有抽象方法,但是包含抽象方法的類必須定義爲抽象類,即用abstract修飾;
2、抽象類跟抽象方法不能被final修飾符修飾;
3、抽象類中可以有非抽象方法,因爲繼承抽象類的子類必須重寫父類中所有的抽象方法,因此抽象類中不能有抽象構造方法和抽象靜態方法;
4、抽象方法沒有方法體;
5、如果子類沒有重寫父類中的抽象方法,則子類也必須定義爲abstract。
package wbb.java.modifies;

/**
 * Created with IntelliJ IDEA.
 * User: wbb
 * Date: 14-7-17
 * Time: 下午2:52
 * To change this template use File | Settings | File Templates.
 */
public abstract class AbstractDemo {
    public abstract void xxx();
}

abstract class Test extends AbstractDemo {
//    public void xxx(){}   //用abstract修飾子類,或者重寫父類中的抽象方法
}
作用:實現多態。

三、修飾符static

static可以用來修飾成員變量,成員方法,代碼塊。
1、被static修飾的成員變量和成員方法,可以直接用類名.靜態變量或靜態方法直接調用;
2、被static修飾的代碼塊稱爲靜態代碼塊,當java虛擬機加載類時,就會執行該代碼塊。
注:靜態變量與實例變量的區別是:java虛擬機只會爲靜態變量分配一次內存,而沒創建一個實例變量虛擬機就會爲其分配一次內存。其作用是能被類的所有實例共享,可作爲勢力之間進行交流的共享數據。例如我們在項目中經常會執行同樣的SQL語句,這樣每次都要寫一次sql語句未免顯得過於繁瑣,我們可以專門寫個類用於存放哪些常用的SQL語句,裏面只定義各種需要重複執行的SQL語句的靜態變量。
package wbb.java.modifies;

/**
 * Created with IntelliJ IDEA.
 * User: wbb
 * Date: 14-7-17
 * Time: 下午3:45
 * To change this template use File | Settings | File Templates.
 */
public class StaticDemo {
    public static final String sqlStr = "SELECT * FROM DUAL";
}

class A extends StaticDemo{
    StaticDemo a = new StaticDemo();
    public static void main(String[] args) {
        System.out.println(StaticDemo.sqlStr);
    }
}
一般情況下,如果有些代碼必須在項目啓動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啓動的時候就初始化,在不創建對象的情況下,其他程序來調用的時候,需要使用靜態方法,這種代碼是被動執行的.靜態代碼塊的作用可用於初始化類,給類的成員變量賦值等等。
package wbb.java.modifies;

/**
 * Created with IntelliJ IDEA.
 * User: wbb
 * Date: 14-7-17
 * Time: 下午4:04
 * To change this template use File | Settings | File Templates.
 */
public class StaticProgram {
    static {
        System.out.println("靜態代碼塊執行");
    }

    public static void main(String[] args) {
        //運行結果:輸出“靜態代碼塊執行”
    }
}

四、final修飾符

final意爲“不可改變的”,可以修飾非抽象類、非抽象成員方法和變量。
1、被final修飾的類不能被繼承,沒有子類;
2、被final修飾的方法不能被子類的方法覆蓋;
3、用final修飾的變量表示常量,只能被賦值一次;
package wbb.java.modifies;

/**
 * Created with IntelliJ IDEA.
 * User: wbb
 * Date: 14-7-17
 * Time: 下午4:10
 * To change this template use File | Settings | File Templates.
 */
public final class FinalDemo {
    private static final int num = 1;

    public static void main(String[] args) {
//        num ++; 被final修飾的變量不能改變
    }
}

//class TestFinalClass extends FinalDemo {} 被final修飾的類不能被繼承

class TestFinalFun {
    public final void finalFun() { }
}

class TestFinalFun2 extends TestFinalFun {
//    public void finalFun() { }  被final修飾的方法不能被重寫
}










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章