JAVA 面向物件(this與super的區別,構造程式碼塊和區域性程式碼塊,靜態程式碼塊的區別)
因為東西太多,一篇文章講完怕是大家也不想看,而且博主也是最近從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不可以同時出現在同一個構造方法裡,他們兩個只要出現都得放在第一行,同時出現的話,到底第一行放誰