文章目录
前言
这是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关键字修饰,然后将其公开化处理才对。
那么我们总结一下,我们需要怎么去进行单例模式的构建。
- 将构造器进行封装
- 创建对象并用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; }
}
总结
这一章节主要记录了类与对象的学习,封装性的学习,构造器的学习,也是我在进行石头剪刀布这个小游戏编写时,遇到一些知识性问题的学习和思考。