对象在需求中的使用
在具体问题中如何使用面向对象去分析问题,和如何使用面向对象。
以把大象装冰箱为例进行分析:
在针对具体的需求,可以使用名词提炼的办法进行分析,寻找具体的对象。需求:把大象装冰箱里
对象:大象、冰箱
分三步:
1、打开冰箱门
2、将大象装进去
3、关闭冰箱门
分析发现打开、装、关闭都是冰箱的功能。即冰箱对象具备如下功能:
1)冰箱打开
2)冰箱存储
3)冰箱关闭
用伪代码描述,上述需求中有两个具体的事物 大象 和 冰箱
描述大象:
class 大象
{
}
描述冰箱
class冰箱
{
void 打开(){}
void 存储(大象){}
void 关闭(){}
}
当把具体的事物描述清楚之后,需要使用这些具体的事物,Java使用具体的事物,需要通过new关键字来创建这个事物的具体实例。
使用对象:
1、创建冰箱的对象
冰箱 bx = new 冰箱();
2、调用冰箱的功能
对象.功能();
bx.打开();
bx.存储(new 大象());
bx.关闭();
总结:
1、先按照名词提炼问题领域中的对象
2、对对象进行描述,其实就是在明确对象中应该具备的属性和功能
3、通过new的方式就可以创建该事物的具体对象
4、通过该对象调用它以后的功能。
对象在代码中的体现
在分析现实生活中的事物时发现,这些事物都有其具体的特点和功能,这些特点和功能就组成了这个特殊的事物。
描述小汽车。
分析:
事物的特点(属性):
颜色。
轮胎个数。
事物的(功能):
运行。
发现:事物其实就是由特点(属性)和行为(功能)组成的。
可以简单理解:属性就是数值,其实就是变量;行为就是功能,就是方法。
小汽车 {
颜色;
轮胎个数;
运行() { }
}
通过计算机语言Java来描述这个事物。
定义类的格式
public class 类名 {
//可编写0至n个属性
数据类型 变量名1;
数据类型 变量名2;
//可编写0至n个方法
修饰符 返回值类型 方法名(参数){
执行语句;
}
}
汽车类
public class Car {
String color;
int number;
void run() {
System.out.println(color + ":" + number);
}
}
通过代码的描述,知道类的真正意义就是在描述事物。属性和功能统称为事物中的成员。
事物的成员分为两种:成员属性和成员功能。
成员属性在代码中的体现就是成员变量
成员功能在代码中的体现就是成员方法
把写好的代码测试一下。需要一个可以独立运行类。
创建对象的格式:
类名 对象名 = new 类名();
测试类
public class CarDemo {
public static void main(String[] args) {
/*
* 测试:Car类中的run方法。
*/
// 1,创建Car的对象。给对象起个名字。
Car c = new Car();// c是类类型的变量。c指向了一个具体的Car类型的对象。
// 2,通过已有的对象调用该对象的功能。格式:对象.对象成员;
// 3,可以该对象的属性赋值。
c.color = "red";
c.number = 4;
c.run();
}
}
类和对象的区别
面向对象的编程思想力图在程序中对事物的描述与该事物在现实中的形态保持一致。为了做到这一点,面向对象的思想中提出两个概念,即类和对象。其中,类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。接下来通过一个图例来抽象描述类与对象的关系,如下图所示。
在上图中,可以将玩具模型看作是一个类,将一个个玩具看作对象,从玩具模型和玩具之间的关系便可以看出类与对象之间的关系。类用于描述多个对象的共同特征,它是对象的模板。对象用于描述现实中的个体,它是类的实例。从上图中可以明显看出对象是根据类创建的,并且一个类可以对应多个对象,接下来分别讲解什么是类和对象。
经过前面几个知识点的学习,基本上掌握了类是用于描述事物的,类中可以定义事物的属性和行为。而对象是通过描述的这个类,使用new关键字创建出来,通过对象就可以调用该对象具体的属性和功能了。局部变量和成员变量区别
理解清楚了类和对象之后,发现在描述类的属性定义变量差别不大,唯一区别就是位置发生了改变,那么类中定义的变量,和在方法定义的变量有什么差别呢?总结下面几点异同
区别一:定义的位置不同
定义在类中的变量是成员变量
定义在方法中或者{}语句里面的变量是局部变量
区别二:在内存中的位置不同
成员变量存储在对内存的对象中
局部变量存储在栈内存的方法中
区别三:声明周期不同
成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失
局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失
区别四:初始化不同
成员变量因为在堆内存中,所有默认的初始化值
局部变量没有默认的初始化值,必须手动的给其赋值才可以使用。
本文结。