开始学Java之后,我第一个接触的就是类与对象。既然Java是面向对象的编程,那么没有对象,编个毛线的程···哈哈哈哈,不过学了“类与对象”就不愁没有对象了,客观存在的任何事物都可以做你的对象(手动狗头)。
现实生活中的类与对象
- 对象:一个具体的实体或者一个具体的事物。
对象应该是具体的,比如现在面前的电脑,手边的那个水杯等等。
对象的描述:属性&功能
比如:
面前的电脑:属性:品牌、型号、尺寸···
功能:写文章、浏览网页、看视频··· - 类:所有的具有相同属性和功能的对象的集合。
比如“电脑”、“水杯”等。
其中的“功能”,用“方法”描述。 - 总结一下,类是对象的抽象,而对象是类的具体实例。对象是类的实例,类是对象的模板。
在计算机中,类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
Java中的类
- 类的创建 关键字: class
格式:public class 类名 { } - 类的属性
格式:public 属性类型 属性名; - 类的方法
格式: public 方法返回值类型 方法名(参数类型1 参数名1,……){
方法需要执行的内容
}
注意:1、方法内部,需要使用自己这个类的属性,直接写属性名即可;
2、方法后面的参数为方法需要使用的外部条件。
Java中的对象
- 对象的创建 关键字: new
格式: 类名 对象名 = new 类名(); - 对象的属性使用
格式: 对象名.属性名 - 对象的方法使用
格式: 对象名.方法名(参数值,……);
例子
举个栗子1–学生小张在学习英语课程,每次学习让英语课程的课时减少1,重复学习,直到英语课程的课时减少为0,学习完成, 学生小张的学分增加英语课程的学分。
- 第一步:分析场景中有哪些对象?
学生小张、英语课程 - 第二步:分析对象的属性和方法?
学生春蕾:
属性:学分、姓名
方法:学习课程
参数:课程对象
方法体:1、课程的课时减少1
2、判断课程的课时是否大于0
3、学生的学分增加课程的学分
英语课程:
属性:课时、学分、课程名
方法:\
**注意**:方法为“被xx”的被动形式时,不需要写。即只要主动形式。
- 第三步:创建类
public class Student {
//学分、姓名
public int score;
public String name;
//学习方法
public void study(Course c) {
//让课程的课时减少1
c.hours = c.hours -1;
//输出 谁在学习什么课程,还剩多少课时完成学习
System.out.println(name+"在学习"+c.name+"课程,还剩"+c.hours+"个课时完成学习!");
//判断是否完成学习
if(c.hours == 0) {
//自己的学分增加课程的学分
score = c.score + score;
//输出 谁完成了什么课程的学习,获得多少个学分,现在的学分是多少
System.out.println(name+"完成了"+c.name+"课程的学习,获得"+c.score+"个学分,现在的学分是:"+score+"。");
}
}
}
public class Course {
//课时、学分、课程名
public int hours;
public int score;
public String name;
}
- 第四步:在主方法中创建对象,按照场景给对象的属性赋值,并且调用方法
//定义一个只有主方法的类 (当主函数代码较长时,可以另外写一类便于查找)
public class Mainer {
//主方法
public static void main(String[] args) {
//创建课程对象
Course english = new Course();
//给英语课程的属性赋值
english.name = "英语";
english.score = 4;
english.hours = 64;
//创建学生对象
Student chunlei = new Student();
//给学生对象的属性赋值
chunlei.name = "春蕾";
chunlei.score = 10;
//课时大于0,重复学习
while(english.hours > 0) {
//学生学习课程
chunlei.study(english);
}
}
}
举个栗子2—钢铁侠和美国队长互相PK,采用回合制,每次攻击,被攻击方的血量减少攻击方的攻击值,重复,直到某一方的血量小于等于0。输出:战斗的过程、结果。
package IronmanPKCaptainAmerica;
public class Blue {
//名称、血量、攻击值
public String name;
public int HP;
public int ATK;
//战斗方法
public void fighting(Red IM) {
//血量减少对方攻击值
IM.HP = IM.HP - ATK;
//输出 谁被谁攻击了多少值
System.out.println(name+"被"+IM.name+"攻击了"+IM.ATK);
//判断自身血量
if(IM.HP <= 0) {
//输出 谁被谁打败了
System.out.println(IM.name+"被"+name+"打败了");
}
}
}
public class Red{
//名称、血量、攻击值
public String name;
public int HP;
public int ATK;
//战斗方法
public void fighting(Blue CA) {
//血量减少对方攻击值
CA.HP = CA.HP - ATK;
//输出 谁被谁攻击了多少值
System.out.println(name+"被"+CA.name+"攻击了"+CA.ATK);
//判断自身血量
if(CA.HP <= 0) {
//输出 谁被谁打败了
System.out.println(CA.name+"被"+name+"打败了");
}
}
}
public class Main {
//主方法
public static void main(String[] args) {
Red Ironman = new Red();
Blue CaptainAmerica = new Blue();
//给战士赋值
Ironman.name = "钢铁侠";
Ironman.HP = 100;
Ironman.ATK = 3;
CaptainAmerica.name = "美国队长";
CaptainAmerica.HP = 80;
CaptainAmerica.ATK = 4;
//血量大于0,持续战斗
while(Ironman.HP > 0 && CaptainAmerica.HP > 0 ) {
Ironman.fighting(CaptainAmerica);
if(CaptainAmerica.HP > 0) {
CaptainAmerica.fighting(Ironman);
}
}
}