二、实例

掷骰子游戏:三粒骰子,掷两次,比较两次的结果。

1.提炼

提炼对象:三粒骰子、游戏

提炼对象的属性和功能:掷骰子、比较点数

骰子:

属性:点数

功能:随机获取一个1~6之间的整数值。

游戏:

属性:三粒骰子

功能:掷骰子(三粒)、比较点数

2.描述对象

骰子类

3.创建对象

类名 对象变量名;

对象变量名=new 类名();//调用构造方法初始化

4.调用对象

属性:对象名.属性名

方法:对象名.方法名(参数列表)

三、类的声明与定义

类是对某一类事物的抽象描述。用类创建对象。抓住“属性”、“功能”。

类是Java程序的基本元素。一个Java程序由若干个类构成。类是Java中重要的一种”数据类型“,类声明

的变量称为对象。

格式:

import java.util.Random;

//骰子类

public class SaiZ {

int value;//点数

Random rnd=new Random();

//随机得到一个点数

public int getValue(){

value=rnd.nextInt(6)+1;

return value;

}

}

public class Game {

SaiZ saiZ[]=new SaiZ[3];

public Game(){

for(int i=0;i<saiZ.length;i++)

saiZ[i]=new SaiZ();

}

public int f(){

int s=0;

for(int i=0;i<saiZ.length;i++)

s=s+saiZ[i].getValue();

return s;

}

public boolean compare(int n1,int n2){

if(n1>=n2)

return true;

else

return false;

}

}

访问控制符:public、private、default、protected

class:关键字,用来定义类

类名:自定义、符合Java标识符规则、驼峰命名法(类名,多个单词组成,每个单词首字母大写;

变量和方法,首字母小写,其余单词首字母大写;常量所有字母大写)、见名知意。

类体:只能有成员变量和成员方法。

成员变量:在类内部声明的变量,它隶属于该类的对象。

成员变量的操作:只能在方法内部进行。

四、对象的创建

类是一种重要的数据类型。可以用来声明变量。它声明的变量称为对象。

引用数据类型和基本数据类型不同,当用类声明对象后,还必须创建对象。即为声明的对象分配所拥有

的变量(确定对象所具有的属性)。当使用一个类创建一个对象时,也称给出了这个类的一个实例。通

俗地讲,

类是创建对象的模板,没有类就没有对象。

五、构造方法

一个特殊的方法

方法名称与类名完全相同。

如果声明类时,没有显式声明构造方法,系统会自动创建一个默认参数为空的构造方法。如果声明

了,则不再自动创建。

构造方法没有返回值。一定不要写void

构造方法必须使用new调用。不能通过“对象名.方法名()”调用

构造方法也可以重载,提供多种创建对象的方法

1.作用

创建对象、实例化对象。为对象的成员变量分配内存空间,并初始化。

2.构造方法的重载

目的:为用户提供多种创建对象的方法。初始化对象的成员变量。(为它的成员变量赋初值)

[访问控制符] class 类名{

成员变量的声明;

成员方法的声明(){}

}

public class Demo1 {

String name;

public void init(){

name="张三丰";

}

}

类名 对象名;//声明对象

对象名=new 类名();//创建对象,为对象的成员变量分配内存

六、对象的内存模型

声明对象变量后,在没有使用new运算之前,该对象为空,称为空对象,不能使用。

public class Demo1 {

public static void main(String[] args) {

Person p1=new Person();

p1.printInfo();

Person p2=new Person("张三丰");

p2.printInfo();

Person p3=new Person("张无忌","男");

p3.printInfo();

Person p4=new Person("赵敏","女",20);

p4.printInfo();

}

}

使用new运算调用类的构造方法后,则为对象的成员变量分配内存空间,并初始化(即赋初值)。

一个类可以通过new运算创建多个不同的对象。这些对象的成员变量将被分配不同的内存空间

new运算只能和构造方法一起使用

七、对象的使用

抽象类的目的,写一个类的目的是创建对象。类具有属性和行为,所以说,对象也具有属性和行为。对

象不仅可以操作自己的变量改变自身的状态,还可以调用类的方法产生一定的行为。

操作其本身的数据:对象名.属性名

调用方法:对象名.方法名(参数列表)

八、Java的程序结构

一个Java程序由若干个类构成。但是Java程序至少要包含一个主类(包含main方法的类)。Java程序从

主类的main方法开始执行。

九、面向对象编程练习

扑克牌游戏,ATM取款机,面向对象的程序设计思想,分析程序。该程序中有哪些对象,每个对象应该

具有哪些属性和方法。只需要写出属性和方法的名称即可,并不需要实现。用我们语言描述即可。

1.ATM取款机

对象:银行卡、ATM取款机

数据:银行卡号、银行卡密码、卡内余额、机内余额

行为:查询余额、取款、存款、转帐、修改密码、显示欢迎信息、主菜单

银行卡:

属性:卡号、密码、余额

行为:查询、取款、存款、转帐、验证

ATM机:

属性:银行卡、余额

行为:显示欢迎信息、主菜单、验证用户身份、查询、取款、存款、转帐

2.扑克牌

对象:52张扑克牌(52个对象)、游戏

扑克牌:

属性:花色、大小、图像

行为:输出面值(得到该扑克牌的图像)

游戏:

Exception in thread "main" java.lang.NullPointerException

at demo1.Demo1.main(Demo1.java:14)

空指针异常,产生的原因就是没有对对象变量使用new运算,也就是说没有调用其构造方法,初始化对

象。

属性:52个扑克牌对象

行为:初始化每一个扑克牌对象(对它的花色、大小赋值)

洗牌(打乱顺序)

抽牌

比较两张牌的大小

public class MyCard {

int color;

int value;

public MyCard(int color, int value) {

this.color = color;

this.value = value;

}

private String getValue(int n){

if(n<=10){

return n+"";

}else if(n==11){

return "J";

}else if(n==12){

return "Q";

}else if(n==13){

return "K";

}else{

return "A";

}

}

public String getFaceValue(){

switch (color){

case 1:

return "黑桃"+getValue(value);

case 2:

return "红桃"+getValue(value);

case 3:

return "梅花"+getValue(value);

default:

return "方块"+getValue(value);

}

}

}

public class MyGame {

MyCard[] myCards=new MyCard[52];

Random rnd=new Random();

public void init(){

int k=0;

for(int i=1;i<=4;i++){

for(int j=2;j<=14;j++){

myCards[k++]=new MyCard(i,j);

}

}

}

微信公从号二维码

public MyCard getCard(int n){

return myCards[n];

}

public void xiPai(){

for(int i=0;i<myCards.length;i++){

int n=rnd.nextInt(52);

MyCard temp=myCards[n];

myCards[n]=myCards[i];

myCards[i]=temp;

}

}

public void printCards(){

for(int i=0;i<myCards.length;i++){

System.out.print(myCards[i].getFaceValue()+" ");

if((i+1)%13==0)

System.out.println();

}

}

}

public class StartGame {

public static void main(String[] args) {

MyGame myGame=new MyGame();

myGame.init();

myGame.printCards();

System.out.println();

myGame.xiPai();

myGame.printCards();

System.out.println("你抽到的牌是:"+myGame.getCard(10).getFaceValue());

}

}

Face_to_object_design的更多相关文章

随机推荐

  1. 在Linux中使用Dbeaver等GTK3界面的软件出现频繁闪烁的问题解决

    问题复现 复现环境LinuxMint 19 Dbeaver: 7.3 输入法: ibus + ibus-table-wubi 如图,当光标移动到Sql Editor中会不停的闪-- 解决过程 先百度. ...

  2. 上传python代码到pypi

    上传python代码到pypi 去pypi官网注册账号 在项目中添加setup.py # coding = utf-8 from setuptools import setup, find_packa ...

  3. eclipse提示JVM版本太低

    解决方案:去eclipse的安装路径找到eclipse.ini文件,然后在头部指定JVM的版本(第一第二行) -vm C:/Program Files/Java/jdk-11.0.9/bin -sta ...

  4. 七、TestNG传递参数2

    数据提供者本身可以接受两个类型的参数:Method和ITestContext 在创建@DataProvider方法是可以有四种格式如图: 第一种在上一篇中有学到 1-Methode参数使用 @Data ...

  5. MySQL MHA安装配置

    1.环境规划 192.168.12.131 node01 192.168.12.132 node02 192.168.12.133 node03 2.环境准备 一主两从GTID,略. 3.配置关键程序 ...

  6. JavaSE12-内部类&API

    1. 参数传递 1.1 类名作为形参和返回值 1.类名作为方法的形参 方法的形参是类名,其实需要的是该类的对象 实际传递的是该对象的[地址值] 2.类名作为方法的返回值 方法的返回值是类名,其实返回的 ...

  7. 使用Jmeter测试thrift接口

    术语描述 jmeter:一款性能压力测试工具,支持多种协议,java .http 等,但是不支持thrift thrift:跨语言的RPC调用框架,提供编译器,可以将thrift接口生成不同语言的接口 ...

  8. vue第十九单元(mapState mapMutations等方法的使用)

    第十九单元(mapState mapMutations等方法的使用) #课程目标 1.熟练使用mapState 2.熟练使用mapGetters 3.熟练使用mapActions 4.熟练使用mapM ...

  9. rbd锁引起kvm虚拟机无法启动的故障

    前言 环境因为一些问题(网络,或者磁盘,或者其它各种异常),引起了集群的状态的一些变化,变化之后,集群的某些虚拟机正常某些虚拟机出现异常,异常现象就是无法启动 特别是win server2008 ,会 ...

  10. Ch2信息的表示和处理——caspp深入理解计算机系统

    目录 第2章 信息的表示和处理 2.1 信息存储 2.1.1 十六进制 一.表示法 二.加减 三.进制转换 2.1.2 字 2.1.3 数据大小 2.1.4 字节顺序与表示 一.字节的排列规则 二.打 ...