歡迎您光臨本站 註冊首頁

JavaSE static final及abstract修飾符實例解析

←手機掃碼閱讀     月球人 @ 2020-06-13 , reply:0

static :靜態常量,靜態方法,靜態代碼塊

靜態變量: 靜態變量屬於類的,使用類名來訪問,非靜態變量是屬於對象的,"必須"使用對象來訪問.

注意:靜態變量對於類而言在內存中只有一個,能被類中所有的實例共享。 實例變量對於類的每一個實例都有一份,

它們之間互不影在加載類的過程中為靜態變量分配內存,實例變量在創建對象時分配內存
 

所以靜態變量可以使用類名來直接訪問,而不需要使用對象來訪問.  

  package com.len.collection;public class PersonTest111 {  private static String username="戰士高高";  private String password;  public static String getUsername() {   return username;  }  public static void setUsername(String username) {   PersonTest111.username = username;  }  public String getPasswoord() {   return passwoord;  }  public void setPasswoord(String passwoord) {   this.passwoord = passwoord;  }  public static void main(String[] args) {   /**    * 第一點: 靜態變量屬於類的,可以使用名來訪問,非靜態變量是屬於對象的,必須使用對象來訪問。    */   System.out.println(PersonTest111.username);   PersonTest111 personTest111 = new PersonTest111();   personTest111.setPasswoord("2131231");   System.out.println(personTest111.getPasswoord());    }}

 

靜態方法:靜態方法數屬於類的,"可以"使用類名來調用,非靜態方法是屬於對象的,"必須"使用對象來調用.
 

靜態方法"不可以"直接訪問類中的非靜態變量和非靜態方法,但是"可以"直接訪問類中的靜態變量和靜態方法
 

注意:this和super在類中屬於非靜態的變量.(靜態方法中不能使用),代碼同上

靜態代碼塊:在類加載的時候被調用,給靜態成員變量賦值

  package com.len.collection;     public class PersonTest extends PersonTest111{    private static String username="張珊";    private String password="123456";    public PersonTest(){      System.out.println("構造方法");    }        static {      System.out.println("靜態代碼塊");    }    public static void main(String[] args) {             PersonTest personTest=new PersonTest();    }  }

 

final 修飾符

  • 用final修飾的類不能被繼承,沒有子類

  • 用final修飾的方法可以被繼承,但是不能被子類的重寫 如java 中每個類都是Object類的子類,繼承了Object中的眾多方法,在子類中可以重寫toString方法、equals方法等,

  • 但是不能重寫getClass方法 wait方法等,因為這些方法都是使用fi修飾的

  • 用final修飾的變量表示常量,只能被賦一次值.其實使用final修飾的變量也就成了常量了,因為值不會再變了。

2)修飾成員變量:
 

非靜態成員變量:
 

public class PersonTest{
 private final int a;
 }
 

只有一次機會,可以給此變量a賦值的位置:
 

聲明的同時賦
 

構造器中賦值(類中出現的所有構造器都要寫)
 

靜態成員變量:
 

public class Person{
 private static final int a;
 }
 

只有一次機會,可以給此變量a賦值的位置:
 

聲明的同時賦值
 

靜態代碼塊中賦值
 

abstract修飾符
 

  • 可以用來修飾方法也可以修飾類,如果修飾方法,那麼該方法就是抽象方法;如果修飾類,那麼該類就是抽象類。

  • 抽象類,不能使用new關鍵在來創建對象,它是用來讓子類繼承的,

  • 抽象方法,只有方法的聲明,沒有方法的實現,它是用來讓子類實現的

注:子類繼承抽象類後,需要實現抽象類中沒有實現的抽象方法,否則這個子類也要聲明為抽象類。
 

類的創建和初始化過程

* 1.類加載,同時初始化類中的靜態屬性
 

* 2.執行靜態代碼塊
 

* 3.分配內存空間,同時初始化非靜態的屬性
 

* 4.調用 PersonTest父類構造器
 

* 5.對PersonTest中的屬性進行顯示賦值
 

* 6.執行匿名代碼塊
 

* 7.執行構造器
 

* 8.返回內存地址

  package com.len.collection;    public class PersonTest extends PersonTest111{    private static String username="張珊";    private String password="123456";    public PersonTest(){      System.out.println("構造方法");    }    //匿名代碼塊是創建對象的時候自動執行,並且是在構造方法之前執行給方法    //作用:給對象的成員變量初始化賦值    {      System.out.println("匿名代碼塊");    }    //靜態方法在類被加載的時候調用    //作用:給靜態成員變量初始化賦值    static {      System.out.println("靜態代碼塊");    }    public static void main(String[] args) {      /**       * 1.類加載,同時初始化類中的靜態屬性       * 2.執行靜態代碼塊       * 3.分配內存空間,同時初始化非靜態的屬性       * 4.調用 PersonTest父類構造器       * 5.對PersonTest中的屬性進行顯示賦值       * 6.執行匿名代碼塊       * 7.執行構造器       * 8.返回內存地址       */      PersonTest personTest=new PersonTest();    }  }

 



[月球人 ] JavaSE static final及abstract修飾符實例解析已經有248次圍觀

http://coctec.com/docs/java/show-post-238411.html