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