ITform java應該注意的問題

目錄

1.getClass 的應用,

2.關於怎麼畫類圖,非常詳細實用

3 字符串中含有漢字,求字符串長度時,漢字跟英文字符等同

4.體現多態性的地方,  函數爲靜態函數時,要根據引用聲明的時候的類型,不是對象的實際類型

5,構造函數調用其他函數,實現的多態性。。(不同於C++)

6 類中的靜態模塊,只加載一次,不論有多少個實例

7,關於抽象類和接口


7,要正確的理解抽象類和接口

抽象類:

(1)抽象類,一個類中,即使所有的方法都實現了,只要在類的前邊加上abstract,,它依然是抽象類;就是說,只要有abstract,即使一個抽象方法沒有也是可以的。即,抽象類中可以含有非抽象方法,且可以不含有任何抽象方法。

(2)抽象類如果含有抽象的變量或值,則它們要麼是null類型,要麼包含了對非抽象類的實例的引用。

(3)抽象類不能同時又是final的。如果一個非抽象類從抽象類繼承而來,則其必須通過覆蓋實現所有繼承的抽象成員。如果沒有實現全部的,則它自己必須定義成抽象類。

(4)任何含有一個或者多個抽象方法的類都必須聲明成抽象類。但是不能定義抽象構造函數和抽象靜態方法。

接口:

(1)接口的訪問修飾符要麼是public(如果接口本身定義成public,則所有方法和變量都是public),要麼是默認的。與抽象類不同,接口中的方法都是沒有方法體的,參數表後面就是分號作爲結束符,它們本質上都是抽象方法。

(2)與抽象類相同的是,如果一個類實現接口,若它實現了接口中定義的全部方法,則它可以是非抽象類(不是必須);但是,如果它沒有實現全部方法,則它必須是一個抽象類。

(3)其實接口沒有能力代替多重繼承,也沒有這個義務;接口的作用,就是標誌類的類別。把不同類型的類歸於不同的接口,可以更好的管理它們。使用接口,可以指定一個類必須做什麼,而不是規定他如何去做。

(4)接口中可以聲明變量,它們一般都是final和static的,還必須以常量值初始化。

(5)類繼承類,用extends;接口繼承接口,也是用extends;如果是類實現接口,用implements;

    類的聲明用class, 接口的聲明用 interface。類只能繼承自一個父類,但是它可以實現多個接口。


1.getClass 的應用,

class A{}
class B extends A{

}


public class cvte1 {
  public static void main(String args[])
  {
 A a1=new A();
 B b1=new B();
 A a2=b1;
 
 System.out.print(a2.getClass().getName());
 System.out.print(b1.getClass().getName());
  }
}


輸出結果:BB


2.關於怎麼畫類圖,非常詳細實用

UML類圖幾種關係的總結 - OPEN 開發經驗庫(複製網址時,前面加http:)
[//www.open-open.com/lib/view/open1328059700311.html】


3 字符串中含有漢字,求字符串長度時,漢字跟英文字符等同

java中char類型是兩個字節,

public class cvte4 {
public static void main(String args[])
{
String ss="北京歡飲你welc";
System.out.println(ss.length());
}
}


輸出結果爲 9


4.

體現多態性的地方,  函數爲靜態函數時,要根據引用聲明的時候的類型,不是對象的實際類型

class AA{
public void M(){
System.out.println("A");
}
}


class BB extends AA{
public void M(){
System.out.println("B");
}
}


class CC extends BB{
public static void M2()
{
System.out.println("C");
}
}


class DD extends CC{
public static void M2()
{
System.out.println("D");
}
}


public class methodm {
public static void main(String args[])
{
DD d=new DD();
CC c=d;
BB b=c;
AA a=b;
d.M2();
c.M2();
b.M();
a.M();  
 
}
}


輸出結果爲:DCBB


5,構造函數調用其他函數,實現的多態性。。(不同於C++)

class MYA{
public MYA(){
PrintField();
}
public void PrintField(){
System.out.println("A");

}
}


class MYB extends MYA{
int x=1;
int y;
public MYB()
{
y=-1;
}
public void PrintField(){
System.out.println("x="+x+"y="+y);
}
}


public class MYconstructor {
public static void main(String args[])
{
MYB b=new MYB();
}
}


x=0,y=0    mainnew B()時,A先加載,A的構造方法中調用printFields(),調用了子類的printFields()方法(父類調用子類方法),System.out.println 執行,輸出int 類型的xy,此時由於B類構造方法還沒執行,x也還沒有被賦值,就輸出了int類型的默認值0.(這和在C++中是不同的,在構造函數中,C++無法實現多態性了)

6 類中的靜態模塊,只加載一次,不論有多少個實例

class A1{
static int a=0;
static{
a++;
}
A1(){
a++;
}


}
public class Mystatic {
  public static void main(String args[]){
 A1 aa1=new A1();
 A1 aa2=new A1();
 System.out.println(A1.a);
 
  }
}


結果爲3


發佈了20 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章