Java代碼塊&繼承

 

一. 代碼塊


概念: 
使用{  } 括起來的代碼,稱爲代碼塊

分類:
根據它位置和聲明的不同,我們可以將代碼塊分爲局部代碼塊,構造代碼塊,靜態代碼塊,同步代碼塊(多線程涉及)

a. 局部代碼塊
限定了變量的生命週期,變量在局部代碼塊中定義的,那麼出來局部代碼塊之後,就訪問不到了。在局部代碼塊中定義的變量,
在出了代碼塊之後,內存就會釋放掉。
 

public class Demo1{
    public static void main(String[] args){
        //局部代碼塊
        {
            int x=10; 
        }
        //內存釋放x,後面還可以定義;但是不能在代碼塊前面定義
        int x = 20;System.out.println(x);
    }
}


作用: 主要就是節約內存.


局部代碼塊中定義的變量,雖然說作用域是局部的,但是如果存在外部嵌套的代碼塊,且在局部代碼塊定義之前就定義了某個變量,
那麼在我們局部的代碼塊中就不可以定義相同名稱的變量。
但是如果在局部代碼塊執行之後,去定義一個和局部代碼塊中相同名稱的變量,是可以的。因爲局部代碼塊中的變量已經失去了作用域範圍。


b.構造代碼塊
概念:
類中方法外出現,每次調用構造方法的時候,都會優先先調用構造代碼塊。


特點:
沒創建一個對象,都會調用一次我們的構造代碼塊.



作用:
如果存在很多重載的構造方法,而且每個裏面需要執行 相同的邏輯,那麼就可以考慮將這些代碼提取到構造代碼塊中來執行。
讓我們代碼結構更簡練。增強了維護性.
使用場景其實不太多見。


c.靜態代碼塊
概念:
類中方法外出現,但是用static 來進行修飾。


特點:
隨着類加載的時候執行。


用處:
適用於整個軟件的生命週期中,只需要執行一次的業務邏輯代碼。

 

比如我們之後數據庫的操作.

 



二. 繼承


特點
1. 子類繼承父類,繼承父類的成員變量和成員方法。但是他們各自擁有的各自的成員變量,所以他們的值,並不會繼承。
2. 對於父類中的私有成員變量和私有方法,子類是無法繼承的。

public class ExtendsDemo4 {
		public static void main(String[] args) {
			Son son = new Son();
			son.speak();
		}
	}

	class Father {
		static void speak() {
			System.out.println("father speak");
		}
	}
	// 子類繼承父類

	class Son extends Father {
		void eat() {
			System.out.println("eat");
			this.speak();
		}

		static void speak() {
			System.out.println("son speak");
		}
	}



繼承優點:
a.提高了代碼的複用性
b.提高了代碼的維護性


繼承缺點:
a.類的耦合性增強了。
開發的原則:
高內聚,低耦合.

耦合: 類和類之間的關係
內聚: 自己獨立完成某件事情的能力.

電視類: 品牌, 價格 , 尺寸
手機類: 品牌, 價格 , 尺寸, 操作系統

上層抽出來一個類: 電器類(品牌,價格,尺寸)

3.只支持單繼承,但是可以支持多層繼承
繼承是相互疊加的,子類繼承的時候,會遞歸似的尋找父類中是否還存在繼承,會繼承整個層級直到最根部類的屬性和方法。

4.對於構造方法是無法繼承的。
但是有辦法可以調用父類的構造方法。
繼承關係中訪問成員變量:

a.不同名的成員變量
子類可以直接訪問和使用父類繼承的非私有的成員變量

b.同名的成員變量
優先原則: 如果子類中定義了和父類中相同名字的成員變量,會優先訪問子類的該變量
如果想要依然訪問到父類中的同名變量,我們需要加上super關鍵字來獲取.


this: 當前對象的引用
super: 父類對象的引用


this: 可以訪問到子類中的變量,也可以訪問到父類中的變量
super: 訪問父類中的變量




繼承關係中訪問成員方法:
a.不同名的方法
子類可以直接調用到父類的方法


b.同名的方法
當父類和子類出現同名方法的時候(同名方法: 指的返回值類型(父子類關係是可以的),方法名稱以及方法接收的形參列表要一模一樣)


在這種情況下:
當我們子類調用該方法時,會有優先原則的處理,就是會調用子類的該方法。




方法的重寫:
存在於繼承關係中,子類中定義的方法和父類中的方法完全一樣的時候(返回值類型父子類關係是可以的),我們在通過子類對象來
訪問該方法的時候,就會調用到子類的方法。


方法重寫注意事項:
子類不能重寫父類的私有方法.

子類重寫父類方法的時候,提供的訪問權限不能更低.

子類覆蓋父類方法,如果父類是靜態方法的話,子類也必須是靜態方法纔可以成功覆蓋,也就是重寫。


方法重載:
同一個類中,如果我們有多個相同方法名的方法,但是他們的形參列表是不同的,那麼這種方式我們就稱爲方法的重載。
在調用的時候,jvm能夠通過不同的形參來區分到我們到底調用的是哪個方法。


關於方法重寫和方法重載的返回值約束:
方法重載: 僅返回值不同是不能重載的。必須參數列表不同。
方法重寫: 返回值類型(父子類關係是可以的) 要求返回值類型也要相同的.

this: 可以訪問子類的方法,也可以訪問父類的方法。
super: 只能夠訪問父類的方法。

練習:
定義長方形類和正方形類, 長方形繼承正方形並且重寫計算面積和周長的方法.

public class ClassTest1 {
		public static void main(String[] args) {
			Square square = new Square();
			System.out.println(square.getSumLength());
			System.out.println(square.getArea());
			Rectangle rectangle = new Rectangle();
			System.out.println(rectangle.getSumLength());
			System.out.println(rectangle.getArea());
		}
	}

	class Square {
		private int lengthOfSide = 10;

		int getSumLength() {
			return 4 * lengthOfSide;
		}

		int getArea() {
			return lengthOfSide * lengthOfSide;
		}
	}

	class Rectangle extends Square {
		int width = 4;
		int height = 5;

		int getSumLength() {
			return (width + height) * 2;
		}

		int getArea() {
			return width * height;
		}
	}


補充:
我們一個文件在編譯之後產生的.class 文件的數量,取決於在該文件中定義的class的數量。(非內部類)
而且是不引入其他類的情況下。


繼承中構造方法的調用:
特點:
1. 創建子類對象的時候,一定會優先去創建父類的對象。 因爲要創建父類對象,所以就需要去調用到父類的構造方法.
2. 對於我們所有的類的構造方法的第一行,第一行在我們沒有自己添加this(...)或者super(...)的情況下都會去幫我們默認的添加
super()

如果父類中不存在默認的構造,子類依然要創建對象,那麼子類就需要顯示的指明調用的是哪一個父類對象,才能保證父類對象
創建的成功。

明確一點: 
a.一定要保證父類對象的創建成功.
b.構造方法的第一行,如果我們添加了自己調用的this(...),或者super(...), 系統就不會爲我們默認的添加super().
c.我們的this(...)或者super(...) 必須放到第一行。二者只能有其一。


三. final關鍵字


a.final修飾類
final如果修飾一個類,該類不能被繼承.


b.final修飾類的成員變量
該成員變量的值不可修改。
問題: 那麼什麼時候初始化這個值?

在對象創建之前都可以.
a.構造代碼塊中可以進行初始化
b.構造方法中可以進行初始化
c.定義成員變量的時候,可以直接進行初始化.


注意一點: 這三種方式同時只能用一種。


在大多數的場景下,我們的final成員變量都會配合public static 一起使用.


//常量類, 變量命名都要大寫,而且單詞之間要用_分割開.
class A{
   public static final double PI = 3.14;
   public static final double RATE = 2.86;
}


A.PI
A.RATE


靜態成員變量的初始化時機:
a.在創建靜態final成員變量的時候,直接進行初始化。
b.在靜態代碼塊中進行初始化.

 

發佈了31 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章