← 回到文章列表

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规范\

  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<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());
	    //解釋輸出所有的資料
	}
}

[媒体不可用] [媒体不可用]
课堂提纲教案

在这里找找

输入关键词,找一篇过去的记录。