文章目录

  • 前言
  • 一、项目起源
  • 二、类与对象
    • 1.类是什么?
    • 2.类在石头剪刀布中的使用
      • 1.权限修饰符
      • 2.get和set方法
      • 3.this关键字
      • 4.构造器
      • 5.单例模式
        • 1.static关键字
        • 2.单例模式的需求
        • 3.对于需求做出解决方法
    • 三、代码的演示
  • 总结

前言

这是java入门学习者亲身经历,旨在记录我入门学习java的历程,还有在学习阶段的一些困惑。这里主要讲述了Java的基础语法的使用和理解。


一、项目起源

这是我的Java老师在第一节课上给我们提的第二个项目——剪刀石头布,为什么是第二个呢?可能是因为老师觉得第一个“动物园”发展空间太小,所以决定另辟蹊径选择这个项目。给我印象巨为之深刻的是老师对这个项目的难度层级的描述。老师将第一层级描绘成一个人机模拟的过程,第二层级是两个真人在不同的电脑上同时运行这个程序进行对战,再到一个班,再到一个学校…
在老师的描述下,我能感觉这个程序不再像之前的程序的一样,单纯在控制台上控制我们进行的行为,而是一个可以成为一个小程序的游戏。但想从控制台到程序,我需要学习的不仅仅是Java语言本身的知识,更是需要去学习更多的知识,所以我愿意用石头剪刀布这个小游戏来讲述我学习Java的历程。

二、类与对象

类与对象可以说是学习Java开始不能逃过的一个问题呢,因为Java是一门面对对象的语言,它所区别我们刚刚开始学习的c语言,因为c是一门面对过程的语言。

1.类是什么?

面对对象,那么类是什么?对象和类是什么关系?这个问题大概多数刚刚入门Java的人都会对其产生疑问?
我们首先会看到很多Java中大部分代码前面都会有class关键字修饰的类名,我们在创建Java项目的时候,在src源文件下创建的选项中就会有Java类

我们创建的一个新的类的时候会发现,我们定义的class类名会跟在class关键字后面,意思就是我们创建一个一个叫做class类名的类。
那么类和对象到底是什么关系呢?在Java我们常常会做这样的操作,类名 对象 = new 类名();的操作, 这个操作通常会被别人称为实例化的过程,用语言理解来理解的话,就是将事物从抽象状态变为一个真实的状态,就比如在工程设计的时候,工程制图,我们要做事情就是将工程制图转化为一个真实的建筑。那么类与对象的关系就显而易见了,类就是一切对象的抽象化的概述,对象是类的实例化,所以对对象做的一切操作,永远不能离开先对类做操作。

2.类在石头剪刀布中的使用

上面,我们理解类和对象这个概念,那么具体在我们实际开发中有什么作用呢?

首先,我们需要去对这个小游戏有一个具体的愿景,第一步:我们是希望我们能人机对战,那么人机对战的话必须需要两个类——一个是人这个类,一个是电脑类。那么人和电脑这个两个类的特征是什么?我们是不是需要给一个名字,给一个id的过程,那么我们就需要对成员变量进行一个定义,那么我们应该怎么去定义呢?

1.权限修饰符

我们会发现有public(公开的),private(私有的)两个关键字,这两个关键字的就是Java体现Java的封装性的最好代表。我们常常会将一些不想被别人直接看到的东西直接对其上锁,而想让别人看到的东西则是直接放开权限。上锁就是private关键字的作用,放开权限的过程,我们常常会将其冠以public关键字修饰。
private关键字的作用就是仅仅只可以在本类中访问。我们可以这样去对其来进行实验。我们可以用private修饰一个成员变量,在另外一个类中去直接用对象引用成员变量的方式直接取其值的方式来观察。

我们发现idea会对i进行一个标红处理,为什么呢?因为我们创造的test1这个对象它虽然得到了i这个成员变量,但是i这个成员变量不允许test1对象的直接访问,那么我们还需要对其需要什么样的操作呢?

2.get和set方法

这个方法是对我们使用private修饰的字符一个给外界提供访问这个变量的方式。这个方法可以使用alt+insert快捷键之间生成。

这样我们name和id,外界就可以直接使用对象调用get和set方法进行调用。那么我们会发现this关键字出现,那么这个关键字的作用是什么?

3.this关键字

this在英语的解释就是这个的意思,那么在this在我们这个类中的作用是什么?我们可以在类中之间使用输出语句对this进行输出,我们会发现它会给我们输出一个地址。那么这个地址是什么?是当前类的地址。那么它的意思就显而易见了,就是一个存放当前类的地址的一个关键字。那么通过this关键字我们就可以访问到当前类下的成员变量进行操作了。

4.构造器

构造器是什么东西呢?我们刚刚说过对象是类的实例化,那么实例化就表明我们应该对其有初始值,那么初始值从何而来,这就离不开构造器的创建和使用了。构造器的快速创建方式和get和set方法一样,一样是alt+insert,我们使用构造器的时候,可以发现它可以创建包括我们所有的成员变量的构造器。那么我们需要思考是否所有东西我们都需要进行一个初始化,我们出拳的手势是否需要初始化,很明显是不需要的,因为这个成员变量需要我们在使用的过程中进行一个值的改变,而且初始状态下我们是不需要做手势的,所以我们只会将姓名和id进行一个初始化的操作。
默认情况下,Java会给我们提供一个无参数构造器,这个无参数构造器,是在我们经常创建对象使用的,如果我们进行有参数构造器的构建,那么我们就不可以按照无参构造器进行使用。

5.单例模式

单例模式这就是牵扯到我们的项目需求了,我们这个版本1.0希望的只是简单人机交互,就一个人和一部电脑进行一个简单的对战功能,那么根据类与对象的原则,我们仅仅需要创建一个人对象和一个电脑对象就行了,那么怎么仅仅只能给外界创建一个对象呢?这就是单例模式解决的范畴了。

1.static关键字

这就要用到static关键字了。static关键字在中文翻译下,译作静态的。解释这个关键词我们就需要用到Java的内存机制来进行解释了。

在Java内存中会有三个地方,分别是方法区、栈和堆三个区域。而static修饰的变量会放在堆中的常量池,被它修饰的变量内存仅仅只有一份·,所以我们对其进行修改的话,是直接对其本身修改,所以这个static关键字的功能和我们单例模式预想功能相似,所以我们尝试一下是否可以通过它构造一个单例模式。

2.单例模式的需求

1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

3.对于需求做出解决方法

首先我们会发现第一个,第二个需求是类似的,第二个和第三个需求是类似的。那么第一个需求只能有一个实例的情况下,我们想要解决的方案,应该就应该我们首先去创造一个实例,然后将构造器封锁起来,然后我们在通过一个特定方式去给外界提供构造器。
那么我们首先应该在本类中去实例化一个对象,然后将构造器给它封装了。那么我们内外相同,本类中还是还是外界都不能再创建一个对象了,那么意味着我们接下来的操作就是需要让内存中仅仅只存在一个对象才行,那么我们我们应该将我们创建的对象用一个static关键字修饰,然后将其公开化处理才对。
那么我们总结一下,我们需要怎么去进行单例模式的构建。

  1. 将构造器进行封装
  2. 创建对象并用static关键字的修饰

三、代码的演示

这里主要是人和电脑这两个类的代码演示。

public class Person {private String name;private String id;public int personGuesture;private Person() {}//饿汉单例模式public static Person person = new Person("person1","0001");public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}private Person(String name, String id) {this.name = name;this.id = id;}
}public class Computer {private String name;private String id;public int computerGuesture;private Computer() {}//饿汉单例模式public static Computer computer = new Computer("computer1","0001");public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}private Computer(String name, String id) {this.name = name;this.id = id;    }
}

总结

这一章节主要记录了类与对象的学习,封装性的学习,构造器的学习,也是我在进行石头剪刀布这个小游戏编写时,遇到一些知识性问题的学习和思考。

从剪刀石头布小游戏开始的Java入门学习(第一章)相关推荐

  1. book类 借书 java_模拟借书系统(Java入门第三季第一章练习)

    程序流程图我就不放上来了,慕友们将就着看看吧,注释还算清晰. 这段代码是Java入门第三季异常与异常处理这一章的练习题, 代码尚有不足,请多多指教. /** * 功能:模拟借书系统 * 要求: * 1 ...

  2. Java黄金矿工小游戏,适合新手入门练手项目

    Java初学者的小伙伴们,相信大家肯定缺少很多的练手项目吧!今天就给大家推荐一款特别好上手的一个Java小游戏--黄金矿工. 大家听到这个名字的时候,童年的回忆肯定一下子,涌上心头,那如果让大家制作一 ...

  3. Java入门基础:剪刀石头布小游戏,练习if else和while等

    1.剪刀石头布小游戏,练习if else和while等 import java.util.Scanner; import java.util.Random;/** * <p>Title: ...

  4. java剪刀石头布小游戏_JAVA实现“剪刀石头布”小游戏

    JAVA实现"剪刀石头布"小游戏 import java.util.Random; import javax.swing.*; import java.awt.BorderLayo ...

  5. 手把手教你用Python做个可视化的“剪刀石头布”小游戏

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 众里寻他千百度.蓦然回首,那人却在 ...

  6. python拿什么做可视化界面好-手把手教你用Python做个可视化的“剪刀石头布”小游戏...

    /1 前言/ 最近在学习PyQt5可视化界面,这是一个内容非常丰富的gui库,相对于tkinter库,功能更加强大,界面更加美观,操作也不难.于是我开始小试牛刀,用PyQt5做个可视化的"剪 ...

  7. python人机猜拳游戏_Python实现剪刀石头布小游戏(与电脑对战)

    具体代码如下所述: srpgame.py #!/urs/bin/env python import random all_choice = ['石头','剪刀','布'] win_list = [[' ...

  8. python剪刀石头布小游戏源码下载_Python Tkinter实现剪刀石头布小游戏

    Python Tkinter实现剪刀石头布小游戏 发布时间:2020-10-26 14:56:52 来源:亿速云 阅读:67 作者:Leah 本篇文章给大家分享的是有关Python Tkinter实现 ...

  9. python实现剪刀石头布_用Python Tkinter实现剪刀石头布小游戏的方法

    用Python Tkinter实现剪刀石头布小游戏的方法 发布时间:2020-12-07 10:38:11 来源:亿速云 阅读:90 作者:小新 这篇文章将为大家详细讲解有关用Python Tkint ...

最新文章

  1. java B2B2C springmvc mybatis电子商务平台源码-Consul服务发现原理...
  2. Kubernetes 2018 年度简史
  3. 19道Python基础列表元祖的练习题
  4. 优化算法笔记|飞蛾扑火优化算法理解及实现
  5. jedis操作set_使用Redis来进行缓存操作
  6. Java 中的array数组总结之一
  7. HP推出UFT新版本UFT12 5以及LeanFT
  8. 建筑电气工程设计常用图形和文字符号_电气设计绘图线宽是什么标准,需要遵循哪些基本原则?你知道吗?...
  9. sql语句优化的几种方法
  10. 贪心算法c语言部分背包,c语言背包问题_背包问题贪心算法_背包问题 贪心算法(13)...
  11. 安卓开发3d模型展示源码_Android(安卓)全套开发资料视频+源码
  12. PID算法控制PWM占空比的代码详解
  13. Oracle 11g R2 RSF(Recurive Subquery factoring)
  14. Mac软件打开提示:已损坏,无法打开。您应该将它移到废纸娄 怎么解决?
  15. python对真假的判断方式
  16. 国家开放大学计算机应用基础终结性考试(大作业).zip
  17. Activiti使用教程
  18. 传统文化之广场舞乱相到底反映出中国社会怎样的深层次矛盾
  19. 小程序源码提取工具_小程序一款高效的视频声音提取和识别工具!
  20. 汉语自动分词研究评述

热门文章

  1. 鸿蒙其实就是一场秀,9岁小学生展示鸿蒙OS开发:这操作太秀了
  2. java显示每年天数_关于日历:Java计算一年中的天数
  3. 系统集成项目管理工程师备考经验之谈
  4. cc1101载波监听 Carrier Sensor
  5. 重置 OpenStack Nova 数据库(没试验过,先收藏,以备不时之需)
  6. 苹果手机拆机与原理图对比分析(设计规范篇)
  7. Ubuntu 18.04安装tensorflow with GPU suport
  8. 坦克大战 秩序白银
  9. springboot解决跨域CROS问题,用注解@CrossOrigin
  10. 重写to String()方法