1. 程式人生 > 其它 >JAVA 面向物件(this與super的區別,構造程式碼塊和區域性程式碼塊,靜態程式碼塊的區別)

JAVA 面向物件(this與super的區別,構造程式碼塊和區域性程式碼塊,靜態程式碼塊的區別)

技術標籤:JAVA OOPjava程式語言封裝多型

因為東西太多,一篇文章講完怕是大家也不想看,而且博主也是最近從C++初學JAVA可能不一樣的東西一時沒發現,所以慢慢分兩章更新,以方便大家閱讀來指出錯誤。
上一篇文章的地址戳這裡
在上一篇中,我大概說了,面向物件程式設計的思想和基本概念,以及物件的在記憶體中的儲存方式,構造與析構,以及四大特徵中的兩個(抽象和封裝),這篇文章主要是對一些基本概念的補充。

一點點基本概念

構造程式碼塊

首先是他的基本概念:
1、 在類的內部,方法外部的程式碼塊。
2、 通常用於抽取構造方法中的共性程式碼。
3、 每次呼叫構造方法前都會呼叫構造程式碼塊
4、 優先於構造方法載入

這個概念看完好像是是而非,那麼我們看段程式碼:

class c{
	String country;
	int a;
	{
		country="中國";
	}
	public c() {
		System.out.println("1號選手,來自"+country);
	}
	public c(int a) {
		System.out.println("2號選手,也來自"+country);
	}
}
public class oopjc {
	public static void main(String[] args) {
		new
c(); new c(1); } }

他的輸出是:
在這裡插入圖片描述
我們看程式碼的位置是在類中,方法外;他裡邊的變數country屬於建構函式中共有的變數,也就是共性程式碼,而且從輸出我們可以知道它比建構函式的呼叫早一點。

區域性程式碼塊

首先是他的基本概念:
1、 在方法裡面的程式碼塊
2、 通常用於控制變數的作用範圍,出了括號就失效
3、 變數的範圍越小越好,成員變數會有執行緒安全問題

	public c(int a) {
		{
			System.out.println("你好我是區域性程式碼塊");
		}
		System.out.println("2號選手,也來自"
+country); }

靜態程式碼塊

1.位置:在類裡方法外
2.在類第一次載入時就載入到記憶體中並一直駐存,
3.全域性共享,直到類消失靜態資源才消失
4.靜態資源只被載入一次
5.一般用於專案的初始化

三者的執行順序

靜態 - 構造程式碼塊 - 構造方法 - 區域性

	static {
		name="來福";
	}
	{
		System.out.println(name);
	}
	public Anmail() {
		System.out.println(name);
	}

輸出了兩次次來福

this關鍵字

this代表本類物件的一個引用物件。
建構函式中,this()必須放在第一行。

	public Anmail(String name, int age) {
		// TODO Auto-generated constructor stub
		this.name=name;
		this.age=age;
	}

我們在建構函式的時候,有時候會出現這種變數和成員變數命名一致的情況,或者方法名一樣的情況,我們需要有一個方法來區別他們,就是this,在類中使用this.變數就是指成員變數。
那麼他還可以怎麼使用呢?
我們還可以用它來實現構造方法間的呼叫:

	public Anmail() {
		this("來福",1);
		System.out.println(name);
	}
	public Anmail(String name, int age) {
		// TODO Auto-generated constructor stub
		this.name=name;
		this.age=age;
	}

super關鍵字

1、 通過super關鍵字可以使用父類的內容
2、 super代表父類的一個引用物件
3、 如果用,必須出現在呼叫位置的第一行
這個和this差不多隻不過this是表示自己類的而super是指父類的。

this和super的區別

1、 this代表本類物件的引用,super代表父類物件的引用。
2、 this用於區分區域性變數和成員變數
3、 super用於區分本類變數和父類變數
4、 this.成員變數 this.成員方法() this([引數])代表呼叫本類內容
5、 super.成員變數 super.成員方法() super([引數]),代表呼叫父類內容
6、 this和super不可以同時出現在同一個構造方法裡,他們兩個只要出現都得放在第一行,同時出現的話,到底第一行放誰

控制訪問符號

在這裡插入圖片描述