java基礎(14)---修飾符

修飾符:final 、static、public、protected、private、default。

1、final(不能修改)

使用final修飾變量定義:該變量一旦被初始化以後就不容許再被修改。函數

final修飾引用類型:一旦爲其賦值,將不可以從新用來引用另外一個對象,不過能夠修改其引用對象的成員 變量。this

final修飾成員變量:其值不能改變,必須進行初始化。spa

public class YourClassNameHere {
  final String color;   // 若是後面沒有在構造函數中初始化,則錯誤。
  final String color1 = "紅色";  //正確,進行顯示初始化
  String color2 = "藍色";
  public YourClassNameHere(String color){
    this.color = color;
  }
  public static void main(String[] args) {
    String color = "黃色";
    YourClassNameHere test = new YourClassNameHere(color);
    System.out.println(test.color);
    String color1 = "綠色";
    YourClassNameHere test1 = new YourClassNameHere(color1);
    System.out.println(test1.color);
    System.out.println(test1.color1);
    
    // test1.color = "改變顏色"; //錯誤,不能修改final變量
    test1.color2 = "改變顏色2";
    System.out.println(test1.color2);
    }
}

final修飾的局部變量:code

final修飾局部變量能夠只聲明不初始化,可是被修飾的局部變量一旦被賦值後就不能進行修改了。若是在建立時沒有對其賦值,那麼在使用前仍是能夠對其賦值的。對象

final修飾的方法:blog

被修飾的方法能被該類的子類所繼承,但不能重寫,這樣保護了父類某些特殊的數據。繼承

//重寫父類方法,但沒有用final修飾
class bike
{
    String color = "黃色";
    
    public void getMes()
    {
        System.out.println("父類的成員變量color" + color);
    }
}
public class test extends bike
{
    String color = "綠色";

    //重寫父類方法
    public void getMes()
    {
        System.out.println("子類的成員變量color" + color);
    }
    public static void main(String[] args)
    {
        test t = new test();
        t.getMes();
        
    }
}    
//重寫父類方法,用final修飾
class bike
{
    String color = "黃色";
    
    public final void getMes()
    {
        System.out.println("父類的成員變量color" + color);
    }
}
public class test extends bike
{
    String color = "綠色";

    //不能重寫父類方法
/*
    public void getMes()
    {
        System.out.println("子類的成員變量color" + color);
    }
*/
    public static void main(String[] args)
    {
        test t = new test();
        t.getMes();
        
    }
}    

final修飾類:說明該類不能有子類,即該類不能被繼承,該類的成員變量在這裏不起做用。內存

final修飾類裏的方法默認被修飾爲final。get

2、static(只能存一份)

靜態:在內存中只能有一份。class

靜態變量:只能存在一份,它屬於類,不屬於對象,不隨着對象的建立而創建副本。若是不想在建立對象的時候就須要知道一些相關信息,那麼就聲明爲static類型。

public class test
{
    static String color = "綠色";
    
    public test(String color)
    {
        this color += color;
    }

    public static void main(String[] args)
    {
        test t1 = new test("黃色");
        test t2 = new test("紅色");

        System.out.println(t1.color);  // 綠色黃色紅色
        System.out.println(t2.color);  //綠色黃色紅色
        System.out.println(color);  //綠色黃色紅色
    }
}

靜態變量的訪問:

  •   類名.靜態成員變量名稱
  •   靜態成員變量名稱

3、靜態常量 static final 

靜態常量:惟一的、不可變的、只存在一份的數據。系統不會分配默認值,必須初始化。

  • static:屬於類,隨着類的建立而建立。
  • final:值不能改變。
  • static和final沒有前後之分。

 4、public、private、default、protected

public:聲明被它修飾的成員變量爲公共類型,這個成員變量在任何包裏都能訪問,包括子類也能訪問到。

private:除了本類外任何類都不能訪問到這個成員變量,具備很好的保護性。

default:若是不給成員變量添加任何修飾符,就表示這個成員變量被修飾爲default類型。在同一個包裏的類或子類是可以訪問的,至關於public類型。可是在不一樣包裏的類或子類沒有繼承該成員變量,是訪問不到它的。

  若是子類在另外一個包裏,而成員變量或方法沒有添加修飾符,子類是訪問不到的。

protected:在同一個包裏和public類型是同樣的,可訪問到。若是在不一樣包裏的protected類型的成員變量就只能經過子類來訪問。子類能夠訪問父類protected權限的成員是指集成到子類中後在子類是可見的,而非子類內部創建一個父類的實例後該實例能夠訪問自身的protected成員。

5、abstract抽象

與final含義徹底相反。抽象類裏最少要含有一個抽象方法,讓子類去實現這個抽象方法

相關文章
相關標籤/搜索