Hello OOP Day04
OOP Day04 ==================== 1 访问控制修饰符 1 public 2 protected 3 [default] 很少使用,很少使用package作为访问控制的边界 4 private * 一般自然现象: 都是尽可能的封装典型. 声明属性和…
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规范\
JavaBean 不是语法规范,是习惯性编程规范,用这个规范
写的类使用方便。有时候JavaBean的类也称为:POJO
Plan Old Java Object简化规范:
a 必须有包.
b Java类,具有无参数构造器。
c 有用getXxx() 和 setXxx() 声明的Bean属性。
如:getName() 和 setName(String n) 声明的
Bean属性为:name, 与是否有实例变量name无关.
boolean类型的get方法可以有两种形式:
getMarried() 或者 isMarried()
d 必须实现序列化接口(在学习IO的时候具体学习。)
e JDK提供的类几乎都符合JavaBean规范。
如:StringJavaBean 最大的好处:“使用方便”
4 static 静态 关键字, 修饰: 属性, 方法, 内部类, 代码块
static修饰的资源属于类级别, 是全体对象实例共享的资源
(属性, 方法, 内部类)\
静态属性, 使用static修饰的属性, 是在类的加载期间初始化
是属于类的, 全体类的实例共享的变量, 使用类名访问属性.
实例变量: 属于对象的属性.\static 方法, 使用static声明的方法, 属于类的方法, 一般
用来表示工具方法. 在类加载以后就可以自己调用, 不需要创建任何
类的实例.\静态代码块,是在类加载期间运行的代码块,由于类只加载
一次,所以静态代码块只执行一次!
用途不是很常见,一般用来在类加载以后初始化一些静态资源
时候使用,如:加载配置文件。静态内部类(在内部类专题讲解)
5 final 最终的\
final 修饰的类,不能再被继承。
Java 的String就是final类,不能被继承!
Math 也是final
Integer (包装类)
在实际项目开发中,原则上不允许使用final类!
Spring, Hibernate,Struts 2, 这个框架经常动态继承
代理我们的类。使用final的类可能造成这些框架的工作问题final修饰的方法,不能再被覆盖。
在实际项目开发中,原则上不允许使用final方法!final 修饰的变量,初始化以后不允许再修改了。
a final 局部变量
b final 方法参数
c final 的成员变量\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<piece;)
{
int random=ran.nextInt(piece);
player[time++%player.length/*0~2*/].add(card[random]);
for(int j=random;j<piece-1;j++)
{
card[j]=card[j+1];
}
piece--;
}
//進行數組縮減式分牌 直到數組長度為0
System.out.println(player[0].toString());
System.out.println(player[1].toString());
System.out.println(player[2].toString());
//解釋輸出所有的資料
}
}
[媒体不可用]
[媒体不可用]
课堂提纲教案