1.文字闡述靜態代碼塊的做用。ide
2.構造代碼塊與構造函數的調用順序如何?和方法的聲明位置是否有關?爲何?構造代碼塊的做用是什麼?函數
3.類加載時,是否必定會執行靜態代碼塊?如何手動控制類加載?測試
4.定義類Person,Man,Woman造成繼承關係。this
5.什麼是抽象方法?什麼是抽象類?抽象類是否有構造函數,是否能夠重載?spa
6.抽象修飾符有哪些非法組合?並給出合理的解釋?orm
7.super和this做用以及用法以及注意事項?對象
8.定義接口繼承
1.IWhite接口
2.IRichget
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接口的類的對象
}
}