java基礎第五天_靜態代碼塊、類的繼承和接口

1.文字闡述靜態代碼塊的作用。

2.構造代碼塊與構造函數的調用順序如何?和方法的聲明位置是否有關?爲什麼?構造代碼塊的作用是什麼?

3.類加載時,是否一定會執行靜態代碼塊?如何手動控制類加載?

4.定義類Person,Man,Woman形成繼承關係。

5.什麼是抽象方法?什麼是抽象類?抽象類是否有構造函數,是否可以重載?

6.抽象修飾符有哪些非法組合?並給出合理的解釋?

7.super和this作用以及用法以及注意事項?

8.定義接口

1.IWhite

2.IRich

3.IBeanti

4.定義類,實現以上三個接口.(WomenStar)

5.定義土豪類(EarchRicher.marring(...))

【--------------------------------問題1-------------------------------------------】

1.文字闡述靜態代碼塊的作用。

答:

靜態代碼塊在類加載的時候執行,而且只執行一次。



【--------------------------------問題2-------------------------------------------】

2.構造代碼塊與構造函數的調用順序如何?和方法的聲明位置是否有關?爲什麼?構造代碼塊的作用是什麼?

答:

構造代碼塊調用順序優先於構造方法,和方法的聲明位置無關。

構造代碼塊作用:

a.可以存放多個構造方法的共同代碼,提升代碼的重複性

b.對成員變量初始化


【--------------------------------問題3-------------------------------------------】

3.類加載時,是否一定會執行靜態代碼塊?如何手動控制類加載?

答:

類加載時默認執行靜態代碼塊。

手動控制類加載使用Class.forName("classname"),默認加載類時,執行代碼塊。

如,

Class.forName("Benz");

Class.forName("Benz", ture, BenzDemo4.class.getClassLoader());

//Benz是要載入的類名,BenzDemo4是測試類,參考下面的代碼

class Benz{

//靜態成員變量

private static String brand="x";

public static String getBrand(){

return brand;

}

//靜態代碼塊

static{//這裏加static,下面加載類Class.forName("Benz");的時候就會把這裏打印出來了,

System.out.println("噴漆!");

System.out.println(brand);

System.out.println("打蠟!");

}

//無參構造函數

public Benz(){

System.out.println("new Benz()---無參構造函數");

}

}




public class BenzDemo4 {

public static void main(String[] args)throws Exception {

//加載Ben類

//Class.forName("Benz");//會有異常,要拋出。---上面的那段靜態代碼段隨着類的加載而加載

//Class.forName("Benz");//只加載一次,第二次及就不加載了

System.out.println("---------------------------------------------------------------------");

Class.forName("Benz", false, BenzDemo4.class.getClassLoader());//false,加在了類,但是沒有初始化的

System.out.println("---------------------------------------------------------------------");

new Benz();//上面如果是false,創建對象的時候加載

new Benz();

System.out.println(Benz.getBrand());//private如果brand不是定義私有的,可以直接類.屬性訪問  ---Benz.brand

}

}


【--------------------------------問題4-------------------------------------------】

4.定義類Person,Man,Woman形成繼承關係。

答:

class Persion {


}


class Man extends Persion {


}


class Woman extends Persion {


}


【--------------------------------問題5-------------------------------------------】

5.什麼是抽象方法?什麼是抽象類?抽象類是否有構造函數,是否可以重載?

答:

抽象方法是:沒有方法體的方法。必須使用abstract修飾.如 public abstract void eat();

抽象類:含有抽象方法的類,就是抽象類,抽象類也必須要使用abstract修飾。abstract class Animal{}

抽象類有構造函數,並且可以被重載


【--------------------------------問題6-------------------------------------------】

6.抽象修飾符有哪些非法組合?並給出合理的解釋?

答:

abstract + static 是非法的修飾符組合。static修飾可以更方便的訪問公共的屬性,抽象的直接訪問時沒有任何意義的

abstract + final  是非法的修飾符組合。final修飾的就是最終的,不能更改,抽象需要去實例化的,需要操作

abstract + private是非法的修飾符組合。抽象類需要子類繼承來實例化,私有是不能繼承的


【--------------------------------問題7-------------------------------------------】

7.super和this作用以及用法以及注意事項?

答:

super : 超類,作用方面類似於this.

super(...) : 訪問超類的構造函數.只能用在第一行。默認是super();

this是隻想對象自身的引用

this:指向對象自身的引用。

this(...)表示的是調用當前類的構造函數.只能用在第一行。默認this();

【--------------------------------問題8-------------------------------------------】

//白

interface IWhite{

public abstract void white();//完整的是這個

}

//富

interface IRich{

void rich();

}

//美

interface IBeauti{

void beauti();

}


//定義一個集成的接口,白富美

interface IWRB extends IWhite,IRich,IBeauti {

//繼承了之前的抽象方法

}


//司機接口

interface IDriver{

public abstract void drive();

}


//女明星實現類---白富美中的典型

class WomanStar implements IWRB{//類型 WomanStar 必須實現繼承的抽象方法 

//實現繼承的抽象方法

public void white(){

System.out.println("I'm white");

}

public void rich(){

System.out.println("I'm rich");

}

public void beauti(){

System.out.println("I'm Beauti");

}

}


//會開車的女明星

class WomanStarDriver extends WomanStar implements IDriver{//只要會開車就可以,用接口--

//類型 WomanStarDriver 必須實現繼承的抽象方法 IDriver.drive()

public void drive(){

System.out.println("女司機開車慢慢開哦");

}

}



//有錢人想徵婚類

class RichMan{

//成員方法,徵婚對象要白富美的女人

public void marry(IWRB woman){//徵婚對象時白富美的聊聊看

System.out.println("聊聊看!!!");

}

//要個開車的女司機

public void driver(IDriver driver){

driver.drive();//這個已經看明白了,創建司機對象 driver,調用司機方法.drive()

}

}


public class MarriyDemo1 {

public static void main(String[] args) {

RichMan rm=new RichMan();//創建一個富商

WomanStar star=new WomanStar();//創建一個女明星

rm.marry(star);//打印出--聊聊看---女明星star是實現了IWRB接口的類的對象

System.out.println("-----------------");

WomanStarDriver m2=new WomanStarDriver();

rm.marry(m2);//找會開車的女明星聊聊看看,也是實現了IWRB接口的類的對象

}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章