IT十八掌大數據第五天作業
1.文字闡述靜態代碼塊的作用。
靜態代碼塊在類加載時被調用,用於類的初始化,且只被執行一次
2.構造代碼塊與構造函數的調用順序如何?和方法的聲明位置是否有關?爲什麼?構造代碼塊的作用是什麼?
構造代碼塊執行順序先於構造函數
構造對象時 先調用構造代碼塊 然後是構造函數
和方法的聲明位置無關
構造代碼塊的作用是對成員變量進行初始化
可以存放多個構造方法的共同代碼 ,提升代碼的重複性
3.類加載時,是否一定會執行靜態代碼塊?如何手動控制類加載?
類加載時靜態代碼塊不一定被執行
手動控制類加載使用Class.forName("classname"),默認加載類時,執行代碼塊。
Class.forName(String,boolean initialize,ClassLoader)可以控制加載時是否初始化,並執行靜態代碼塊。
4.定義類Person,Man,Woman形成繼承關係。
代碼:
/**
* Extends
*/
classPerson {
public String name="Bruce";
public int age=80;
public Person(){
System.out.println("newPerson");
}
public void eat(){
System.out.println("eat");
}
}
classMan extends Person{
public String behaviour ="working";
public Man(){
System.out.println("newMan");
}
public void eat(){
//super.eat();
System.out.println("Maneat");
}
public void ShowMan(String name,int age,String behaviour){
System.out.println("manname is "+name+" , age is "+String.valueOf(age)+",behaviour is "+behaviour);
}
}
classWoman extends Person{
public String behaviour ="Shopping";
public Woman(){
System.out.println("newWoman");
}
public void eat(){
//super.eat();
System.out.println("Womaneat");
}
public void ShowWoman(String name,int age,String behaviour){
System.out.println("Womanname is "+name+" , age is "+String.valueOf(age)+",behaviour is "+behaviour);
}
}
classExtendsTest{
public static void main(String[] args){
Man man=new Man();
Woman woman=new Woman();
man.eat();
man.name="Kal";
man.age=95;
man.ShowMan(man.name,man.age,man.behaviour);
woman.eat();
woman.name="Kistina";
woman.age=100;
woman.ShowWoman(woman.name,woman.age,woman.behaviour);
}
}
執行結果:
Java文件
5.什麼是抽象方法?什麼是抽象類?抽象類是否有構造函數,是否可以重載?
抽象方法:沒有方法體的方法。必須使用abstract修飾。
抽象類:抽象方法只能存在於抽象類中。抽象類也必須要使用abstract修飾。
有抽象方法的一定是抽象類,抽象類不一定有抽象方法
抽象類有構造函數並且可以重載。
6.抽象修飾符有哪些非法組合?並給出合理的解釋?
abstract + static 是非法的修飾符組合。
abstract + final 是非法的修飾符組合。
abstract + private是非法的修飾符組合。
被abstract修飾過的方法或類必須要被繼承並實現,但被final修飾過的是最終的,不能更改
final修飾過的類或方法不能被繼承因此abstract + final是非法的修飾符組合;
被abstract修飾過的方法或類必須要被繼承並實現,但被private修飾過的類或方法是私有的,
不能被繼承因此abstract + static 是非法的修飾符組合;
被abstract修飾過的方法或類必須要被繼承並實現並且包含abstract方法的類也必須是抽象類
,因此這個類不能被實例化,但加上static修飾後通過類名就可以創建對象進行實例化,相互
矛盾,因此abstract + static 是非法的修飾符組合
7.super和this作用以及用法以及注意事項?
super : 超類,作用方面類似於this.
super(...): 訪問超類的構造函數.只能用在第一行。默認是super();
this是隻想對象自身的引用
this:指向對象自身的引用。
this(...)表示的是調用當前類的構造函數.只能用在第一行。默認this();
8.定義接口
1.IWhite
2.IRich
3.IBeanti
4.定義類,實現以上三個接口.(WomenStar)
5.定義土豪類(EarchRicher.marring(...))
05_interface.java
代碼:
/**
* 定義接口
*/
interface IWhite{
public static final booleaniswhite=true;
public void IWhite(boolean iswhite);
}
interface IRich{
public static final boolean isrich=true;
public void IRich(boolean isrich);
}
interface IBeanti{
public static final boolean isbeautiful=true;
public void IBeanti(boolean isbeautiful);
}
interface IBFM extends IWhite,IRich,IBeanti{
}
classWomenStar implements IBFM{
public void IWhite(boolean iswhite){
System.out.println("WomenStar white is"+String.valueOf(iswhite));
}
public void IRich(boolean isrich){
System.out.println("WomenStar rich is "+String.valueOf(isrich));
}
public void IBeanti(boolean isbeautiful){
System.out.println("WomenStar beautifulis "+String.valueOf(isbeautiful));
}
public static boolean getIswhite(){
return iswhite;
}
public static boolean getIsrich(){
return isrich;
}
public static boolean getIsbeautiful(){
return isbeautiful;
}
}
classEarchRicher{
public voidmarring(WomenStar woman){
if(woman.getIswhite()&&woman.getIsbeautiful()&&woman.getIsrich())
System.out.println("marringsuccess");
elseSystem.out.println("marring fialed");
}
}
classintefaceTest{
public static void main(String[] args){
WomenStar ws =new WomenStar();
EarchRicher er= new EarchRicher();
ws.IWhite(ws.iswhite);
ws.IRich(ws.isrich);
ws.IBeanti(ws.isbeautiful);
er.marring(ws);
}
}
執行結果: