1. 程式人生 > >面向物件-封裝

面向物件-封裝

JavaSE學習筆記第七天-面向物件之封裝

  • 什麼是封裝?

    • 將某些東西包裝在一起,然後以新的完整形式呈現出來。
  • 封裝的目的和意義?

    • 提高安全,不能讓外部隨便呼叫和更改內部屬性。
    • 方便我們控制業務員邏輯。
  • 如何實現封裝?

    使用private修飾成員變數。然後在給這些成員變數根據相應的需求提供相應的public的set和get方法。

  • get和set方法的意義和書寫形式?

    許可權修飾符 void setXxxx(變數型別 xxxx){
    	this.xxxx = xxxx;
    }
    許可權修飾符 變數型別 getXxxx(){
    	return xxxx;
    }
    
  • this關鍵字

    • this指代當前物件。
    • this在不會發生混淆的時候可以省略。
    • this(引數列表);this();表示呼叫本類的構造方法。
    • this呼叫構造方法的時候,必須寫在第一行。
    • this.方法名();呼叫本類的方法。
    • this.屬性名;訪問本類的屬性。
  • 什麼是方法過載?返回值不同能不能作為方法過載的條件?形式引數名不同能不能作為過載條件?

    • 方法過載就是相同的方法名,形式引數不一樣。
    • 返回值型別不一樣不構成過載,方法的過載和返回值無關。只與方法名和形式引數有關。
    • 形式引數名不同不能作為能不能構成過載的條件,因為引數型別一樣的話,是不會構成過載,只有引數型別不一樣,或個數,或順序不一樣才會構成過載,前提是方法名相同。
  • 構造方法可不可以過載?

    可以,不同的形參下就構成了過載。

  • static關鍵字的作用?【重點】

    • 可用於修飾成員變數,成員方法,靜態程式碼塊,讓這些優先於類載入,所以這些用static修飾的類和靜態程式碼塊只能訪問靜態的成員變數。
    • 修飾成員變數: 稱為類變數,可以通過類名訪問,也可通過物件訪問,建議使用類名。在記憶體中只會存在一份,所有物件都共享。
    • 修飾成員方法:靜態方法,屬於類方法,優先與物件載入到記憶體的靜態方法區。
    • 修飾程式碼塊:只會執行一次,一般用於載入配置檔案。 在類載入的時候執行。
    • 靜態程式碼優先與類構造器執行。
  • 靜態變數和成員變數的區別?【重點、難點】

    • 靜態變數又稱類變數。靜態變數是一個類載入之後所有所有的物件都是共用這一個變數。也就是說,它只會存在一份,所有的物件都是訪問這一個,修改了之後所有的物件裡面的值也都是修改了。只有這個程式結束了才會回到這個類變數給定的初始值。
    • 成員變數是隻有在這個類new出來之後才會有的,而且每個物件的這個變數都是互不影響的。這個物件給了這個變數一個值,那個物件給了另外的值,這兩個值是不會覆蓋誰的值,互不影響的。
  • 包,打包和導包分別使用什麼關鍵字?

    • 打包 package 包名
    • 導包 import 包名.類名
  • 一個java檔案中允不允許有多行package語句?

    不能,而且package只能在第一行。

  • 允不允許有多個import語句?

    可以。

    在我理解中:導包的本質應該就是簡化書寫吧,不適用import,也是可以找到這個物件,如下

    java.util.Scanner sc = new java.util.Scanner(System.in);
    

    這樣也是可以的,但是這樣的話,很麻煩,而且程式碼會看起來很凌亂。

  • 哪個包中的類不需要導包?

    java.lang

  • 成員變數、區域性變數和靜態變數的區別

成員變數 區域性變數 靜態變數
定義位置 類中,方法外 方法中,方法簽名中 類中,方法外
初始化 有預設初始化 沒有預設初始化,要賦值才能使用 有預設初始化
呼叫方式 物件例項呼叫 ---- 物件呼叫(不推薦),類名呼叫
儲存位置 堆中 棧中 方法區
生命週期 與類共存 與方法共存 與類共存
別名 例項變數 ---- 類變數