代碼塊分為4種
1.局部代碼塊: 在方法中,限定了局部變量的作用範圍
2.構造代碼塊 : 類中方法外,顧名思義,就是執行個體對象時調用,優先于構造函數調用
3.靜态代碼塊:使用static來修飾類中方法外,與構造代碼塊不同,靜态代碼塊是在類加載的時候就加載到靜态區中,優先建立與對象,而且隻調用一次.應用場景:驅動加載
4.同步代碼塊,多線程中才用到,新手先知道有這概念即可
下面有段代碼,來好好建議你的掌握程度:
class Student {
static {
System.out.println("Student 靜态代碼塊");
}
{
System.out.println("Student 構造代碼塊");
}
public Student() {
System.out.println("Student 構造方法");
}
}
class Demo2_Student {
static {
System.out.println("Demo2_Student靜态代碼塊");
}
public static void main(String[] args) {
System.out.println("我是main方法");
Student s1 = new Student();
Student s2 = new Student();
}
}
輸出:依次為
1.System.out.println("Demo2_Student靜态代碼塊")
2.System.out.println("我是main方法");
3.System.out.println("Student 靜态代碼塊");
4.System.out.println("Student 構造代碼塊");
5.System.out.println("Student 構造方法");
6.System.out.println("Student 構造代碼塊");
7.System.out.println("Student 構造方法");
記憶體分析圖
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9UFVPNzYq1kenpWTmZEWjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DM2YDMygTMwIzNwITM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
在結合上面的靜态語句塊和構造語句塊,就可以的到上面依次列印的結果.
繼承:在封裝之後,java面向對象的三大特性之二,(最後一個是多态,多态的前提必須有繼承,繼承中的重寫(Override),以及父類引用指向子類對象),
把類中相同的代碼 抽取出來 寫成一個類,最為一個父類,給子類繼承使用
繼承的特點:減少代碼的重複編寫量
繼承寫法:
class 子類 extends 父類{
} (這裡的父類不可以是final 修飾的類,下面會講到final 修飾符)
在Java 中隻有單繼承,如何實作多繼承的功能呢?
就要使用JAVA 所允許的多接口,實作多繼承的效果
所有的類都有一個基類(Object 類)
繼承中的構造方法,是不能被繼承的
class Father{
String name;
public Father() {
this("ssss");
System.out.println("無參構造方法");
}
public Father(String name) {
this.name = name;
System.out.println("有參構造方法"+name);
}
private void sayhi() {
System.out.println(name);
}
}
class Son extends Father{
public Son() {
super();//沒寫,系統就自己加上
}
public Son(String name) {
super();//沒寫,系統就自己加上
this.name = name;
System.out.println("子類有參構造");
}
}
這裡要注意到,子類Son 的構造方法雖然沒有繼承父類構造方法,但是他的構造方法中,會自己調用父類的無參構造方法.即使不寫,系統也會自動加上.
繼承時,如果子類和父類有相同名字的成員變量, 用this.成員變量 就是調用目前子類的屬性,如果子類沒有,系統會自動去父類中尋找.
super. 在類中代表的是父類對象,super.調用父類的屬性.
this(); 調用本類的構造方法
super(); 調用父類的構造方法
final 修飾符:
1.修飾類(不能被繼承)
2.修飾變量(不能被修改) 相當于常量(不能被修改的量) 命名規則 字母全部大寫 ,多單詞下劃線分開
final 變量有兩種指派方式:第一個,直接在類聲明成員變量時給初值 第二個,在構造方法中指派
3.修飾方法(不能被重寫)