Welcome to Yumao′s Blog.
Hello OOP Day04
, 2012年03月07日 , Java Language , 评论 在〈Hello OOP Day04〉中留言功能已關閉 ,

OOP Day04
====================

1 訪問控制修飾符
1 public
2 protected
3 [default] 很少使用,很少使用package作為訪問控制的邊界
4 private

* 一般自然現象: 都是儘可能的封裝典型.

聲明屬性和方法儘可能私有。這樣才能做到儘可能的封裝。
提供適當的屬性訪問方法,適當的開放屬性的訪問。

一個源文件可以有多個類, 但是只能有一個public類,
文件名要與Public類一致. 如果有其他類, 就只能是默認修飾

不建議使用非公有類。就是說所有類都應該是公有的,並且
一個源文件一個類。

2 引用類型轉換(是引用變量的類型的轉換!)
1 向下轉型(隱式/自動類型轉換),是小類型到大類型的轉換
如:
Circle c = new Circle(1,2,3);
Shape s = (Shape) c;//表示圓一定是圖形

2 向上造型(強制類型轉換),是大類型到小類型。
如:
Shape s = (Shape) new Circle(1,2,3);
Cirlcle c = (Circle)s; //當s實際引用圓時候,能夠轉換成功
s = new Rectangle(1,1,2,2);
Circle c2 = (Circle) s;//出現類型轉換異常,因為
// s引用的是Rectangle 不是圓實例。
3 instanceof 運算符,用來檢查引用對象的類型。
經常與“引用類型強制轉換”配合,實現安全的類型轉換,
避免類型轉換異常。

3 Java Bean
關於JavaBean規範
1) JavaBean 不是語法規範,是習慣性編程規範,用這個規範
寫的類使用方便。有時候JavaBean的類也稱為:POJO
Plan Old Java Object

2) 簡化規範:
a 必須有包.
b Java類,具有無參數構造器。
c 有用getXxx() 和 setXxx() 聲明的Bean屬性。
如:getName() 和 setName(String n) 聲明的
Bean屬性為:name, 與是否有實例變量name無關.
boolean類型的get方法可以有兩種形式:
getMarried() 或者 isMarried()
d 必須實現序列化接口(在學習IO的時候具體學習。)
e JDK提供的類幾乎都符合JavaBean規範。
如:String

3) JavaBean 最大的好處:“使用方便”

4 static 靜態 關鍵字, 修飾: 屬性, 方法, 內部類, 代碼塊
static修飾的資源屬於類級別, 是全體對象實例共享的資源
(屬性, 方法, 內部類)
1) 靜態屬性, 使用static修飾的屬性, 是在類的加載期間初始化
是屬於類的, 全體類的實例共享的變量, 使用類名訪問屬性.
實例變量: 屬於對象的屬性.
2) static 方法, 使用static聲明的方法, 屬於類的方法, 一般
用來表示工具方法. 在類加載以後就可以自己調用, 不需要創建任何
類的實例.
3) 靜態代碼塊,是在類加載期間運行的代碼塊,由於類只加載
一次,所以靜態代碼塊只執行一次!
用途不是很常見,一般用來在類加載以後初始化一些靜態資源
時候使用,如:加載配置文件。

4) 靜態內部類(在內部類專題講解)

5 final 最終的
1) final 修飾的類,不能再被繼承。
Java 的String就是final類,不能被繼承!
Math 也是final
Integer (包裝類)
在實際項目開發中,原則上不允許使用final類!
Spring, Hibernate,Struts 2, 這個框架經常動態繼承
代理我們的類。使用final的類可能造成這些框架的工作問題

2) final修飾的方法,不能再被覆蓋。
在實際項目開發中,原則上不允許使用final方法!

3) final 修飾的變量,初始化以後不允許再修改了。
a final 局部變量
b final 方法參數
c final 的成員變量
4) final static — Java使用final static修飾的變量作為常量。
一般要求常量名都有大寫字母。
常量不是: const

常量 和 字面量/直接量

public static final int ACE = 13;
Math.PI
//ACE 常量 13是直接給出的字面量
“達內”字符串字面量

常量和字面量都是不可改變的常數, 廣義上都稱為”常量”

減少硬編碼!”硬編碼” 是指在代碼中直接使用”字面量”
將字面量替換為常量/變量

public static final int ZERO=0;

for(int i=0; i<54; i++){ } for(int i=ZERO; i } 作業: 1 複習並且全部使用課堂案例代碼 2 實現撲克牌類Card 實現 1 創建54張撲克牌, 2 洗牌 3 發牌到3個Player人 Player屬性: String name, Card[] cards = {}; 人每次接收拍時候需要擴展cards數組 4 實現抽取5張牌的算法 預習: Object, Stirng, StringBuilder 關鍵實例代碼如下《三人54張撲克牌分配問題》

/*第一個文件  Java_8*/
package Day08;
public class Java_8
//撲克牌
{
	public static int diamon=0,club=1,heart=2,spade=3,joker=4;
	private int suit;
          private int rank;
	public Java_8()
	{
	}
	public static int three=0;
	public static int four=1;
	public static int five=2;
	public static int six=3;
	public static int seven=4;
	public static int eight=5;
	public static int nine=6;
	public static int ten=7;
	public static int J=8;
	public static int Q=9;
	public static int K=10;
	public static int ace=11;
	public static int two=12;
	public static int black=13;
	public static int color=14;
	public Java_8(int suit,int rank)
	{
		this.suit=suit;
		this.rank=rank;
	}
	//花色的存取
	public int getSuit()
	{
		return suit;
	}
	public void setSuit(int suit)
	{
		this.suit=suit;
	}
	//點數的存取
	public int getRank()
	{
		return rank;
	}
	public void setRank(int rank)
	{
		this.rank=rank;
	}
	//解釋部分:
		private static final String[]rankname =
	    {“3″,”4″,”5″,”6″,”7″,”8″,”9″,”10″,”J”,”Q”,”K”,
	      “A”,”2″,”小王”,”大王”};
	  private static final String[] suitname =
	    {“方塊”,”梅花”,”紅桃”,”黑桃”,””};
	  public String toString()
	  {
	    return suitname[suit]+rankname[rank];
	  }
}
/*文件2 Java_13*/
package Day08;
//Java_8
import java.util.Arrays;
public class Java_13
{
	 //定義結構
	  private int id;
	  private String name;
	  private Java_8[] cards={};

	  public Java_13()
	  {
	  }
	  public Java_13(int id, String name) {
	    this.id = id;
	    this.name = name;
	  }
	  //手牌數組擴展  將卡片插入數組
	  public void add(Java_8 card){
	    this.cards = Arrays.copyOf(cards, cards.length+1);
	    cards[cards.length-1] = card;
	  }
	  //重寫
	  public Java_8[] getCards() {
	    return cards;
	  }
	  public void setCards(Java_8[] cards) {
	    this.cards = cards;
	  }

	  public int getId() {
	    return id;
	  }
	  public void setId(int id) {
	    this.id = id;
	  }

	  public String getName() {
	    return name;
	  }
	  public void setName(String name) {
	    this.name = name;
	  }
	  //返回編號  姓名  手牌
	  public String toString() {
		  return id+" "+ name + Arrays.toString(cards);
	  }
}
/*Main文件  Java_14*/
package Day08;
import java.util.Random;
public class Java_14
{
	public static void main(String[] args)
	{
		int piece=0;
		Java_8 card[]=new Java_8[54];
		for(int i=Java_8.diamon;i<=Java_8.spade;i++)
			for(int j=Java_8.three;j<=Java_8.two;j++)
			{
				card[piece++]=new Java_8(i,j);
			}
		card[piece++]=new Java_8(Java_8.joker,Java_8.black);
		card[piece++]=new Java_8(Java_8.joker,Java_8.color);
		//以上是卡片存盤
		//System.out.println(Arrays.toString(card));    卡片存盤檢查
		Random ran=new Random();
		Java_13 player[]=new Java_13[3];
		player[0]=new Java_13(1,"張三");
		player[1]=new Java_13(2,"李四");
		player[2]=new Java_13(1,"王五");
		//用戶初始化
		int time=0;
		for(int i=0; i

Code Package
MyCode

课堂提纲教案

评论已关闭