目录
一、对象在需求中的使用
需求:把大象装冰箱里
面向过程: a. 自己打开冰箱门; b. 自己将大象装进去; c. 自己关闭冰箱门
面向对象:分析发现打开、装、关闭都是冰箱的功能。 即冰箱对象具备如下
功能: a. 打开门; b. 存储事物; c. 关闭门;
通过伪代码描述大象和冰箱
* 描述大象: class 大象 {}
* 描述冰箱: class 冰箱 {
void 打开() {}
void 存储(大象) {}
void 关闭() {}
}
使用对象:
a. 创建冰箱的对象:冰箱 bx = new 冰箱();
b. 调用冰箱的功能:对象.功能(); bx.打开(); bx.存储(new 大象()); bx.关闭();
总结:
a. 先按照名词提炼问题领域中的对象
b. 对对象进行描述,其实就是在明确对象中应该具备的属性和功能
c. 通过new的方式就可以创建该事物的具体对象
d. 通过该对象调用它以后的功能。
二、对象在代码中的体现
1. 分析小汽车的属性和功能
属性: i. 颜色 ii. 轮胎个数
功能: a. 运行
2. 通过伪代码描述小汽车
class 小汽车 {
颜色;
轮胎个数;
运行() {}
}
3. 通过Java代码描述小汽车
定义类的格式
public class 类名 {
//可编写0至n个属性
数据类型 变量名1;
数据类型 变量名2;
//可编写0至n个方法
修饰符 返回值类型 方法名(参数){
执行语句;
}
汽车类
public class Car {
String color;
int tyreNumber;
void run() {
System.out.println(color + ":" +
number);
}
}
4. 创建对象的格式:
类名 对象名 = new 类名();
5. 测试类
public class CarDemo {
public static void main(String[] args) {
/*
* 测试:Car类中的run方法。
*/
// 1,创建Car的对象。给对象起个名字。
Car c = new Car();// c是引用类型Car的变量。c指向了一个具体的Car类型的对象。
// 2,通过已有的对象调用该对象的功能。格式:对象.对象成员;
// 3,可以该对象的属性赋值。
c.color = "red";
c.number = 4;
c.run();
}
}
三、对象的内存图解
四、类和对象的区别
类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体
在上图中,可以将玩具模型看作是一个类,将一个个玩具看作对象,从玩具模型和 玩具之间的关系便可以看出类与对象之间的关系。
五、成员变量和局部变量的区别
1、区别一:定义的位置不同
a. 定义在类中的变量是成员变量
b. 定义在方法中或者{}语句里面的变量是局部变量
2、区别二:在内存中的位置不同
a. 成员变量存储在对内存的对象中
b. 局部变量存储在栈内存的方法中
3、区别三:声明周期不同
a. 成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失
b. 局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失
4、区别四:初始化不同
a. 成员变量因为在堆内存中,所有默认的初始化值
b. 局部变量没有默认的初始化值,必须手动的给其赋值才可以使用
六、基本类型和引用类型作为参数传递
1、基本类型
class Demo {
public static void main(String[] args) {
int x = 4;
show(x);
System.out.println("x="+x);
}
public static void show(int x) {
x = 5;
}
}
基本类型作为参数传递时,其实就是将基本类型变量x空间中的值复制了一份 传递给调用的方法show(),当在show()方法中x接受到了复制的值,再在show()方 法中对x变量进行操作,这时只会影响到show中的x。当show方法执行完成,弹栈 后,程序又回到main方法执行,main方法中的x值还是原来的值。
2、引用类型
class Demo {
int x ;
public static void main(String[] args) {
Demo d = new Demo();
d.x = 5;
show(d);
System.out.println("x="+d.x);
}
public static void show(Demo d) {
d.x = 6;
}
}
当引用变量作为参数传递时,这时其实是将引用变量空间中的内存地址(引用) 复制了一份传递给了show方法的d引用变量。这时会有两个引用同时指向堆中的同 一个对象。当执行show方法中的d.x=6时,会根据d所持有的引用找到堆中的对 象,并将其x属性的
结论
a. 对于基本类型形式参数改变不会影响到实际参数
b. 对于引用类型形式参数改变会影响到实际参值改为6,show方法弹栈。 由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对 象的中的值,其他引用再次使用都是改变后的值。