Face_to_object_design
二、实例
掷骰子游戏:三粒骰子,掷两次,比较两次的结果。
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的更多相关文章
随机推荐
- Hexo博客框架10分钟搭建个人博客
首先是先给大家打个招呼 最近看网上看到了很多的的关于搭建博客的视频,我自己也学着自己搭建了一个博客"我自己的博客链接"(欢迎大家来我的博客跟我深入交♂流),今天我把搭建的过程记录下 ...
- Vue:对axios进行简单的二次封装
主要做3点: 1.配置一个请求地址前缀 2.请求拦截(在请求发出去之前拦截),给所有的请求都带上 token 3.拦截响应,遇到 token 不合法则报错 // 对 axios 的二次封装 impor ...
- react项目中对dom元素样式修改的另一种方法以及将组件插入到node节点中
在项目中,以前如果遇到对dom元素的操作都是直接获取dom元素,比如说: 但是如果修改的样式比较多的话,不如直接"切换"dom元素,如下例子: 这样会节省一些性能.因为操作dom的 ...
- CSS文本溢出效果&滚动条样式设置
一.文本溢出 1.overflow: hidden; 超出文本会被剪裁隐藏不可见 scroll;超出文本会被剪裁, 显示滚动条 auto; 如果文本超出会显示滚动条,没超出不会显示, overflo ...
- Java IO流字符流简介及基本使用
Java IO流字符流简介及常用字符流的基本使用 字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能.在编码中我们常用的输出字符流有File ...
- C# 好代码学习笔记(1):文件操作、读取文件、Debug/Trace 类、Conditional条件编译、CLS
目录 1,文件操作 2,读取文件 3,Debug .Trace类 4,条件编译 5,MethodImpl 特性 5,CLSCompliantAttribute 6,必要时自定义类型别名 目录: 1,文 ...
- go-slice实现的使用和基本原理
目录 摘要 Slice数据结构 使用make创建Slice 使用数组创建Slice Slice 扩容 Slice Copy 特殊切片 总结 参考 你的鼓励也是我创作的动力 Posted by 微博@Y ...
- 我们为什么选择VUE来构建前端
很多使用过VUE的程序员,对VUE的评价是"Vue.js 兼具angular.js和react.js的优点,并剔除了它们的缺点". 那么,他真的值得这么高的评价嘛? Vue.js的 ...
- C# Attribute特性 泛型<T> 方法的out ref this(扩展方法) Equals与==
out ref out和ref的使用场景其实不一样.out适合在方法内返回一个额外的结果参数,而ref适合直接改变一个在方法外面的值,方法改变外部就改变,无需重新定义接住返回值再使用. out可以在方 ...
- Powerdesigner中表导出sql语句关于字段注释乱码的问题
问题说明 注释中的汉字都变成了?,应该是编码的问题. declare @CurrentUser sysname select @CurrentUser = user_name() execute sp ...