java程序基础——类与对象

目录

一、对象在需求中的使用

二、对象在代码中的体现

1. 分析小汽车的属性和功能

2. 通过伪代码描述小汽车 

3. 通过Java代码描述小汽车

4. 创建对象的格式: 

5. 测试类

三、对象的内存图解 

四、类和对象的区别

五、成员变量和局部变量的区别

1、区别一:定义的位置不同

2、区别二:在内存中的位置不同

3、区别三:声明周期不同

4、区别四:初始化不同

六、基本类型和引用类型作为参数传递

1、基本类型

2、引用类型


一、对象在需求中的使用

需求:把大象装冰箱里

面向过程: 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方法弹栈。 由于是两个引用指向同一个对象,不管是哪一个引用改变了引用的所指向的对 象的中的值,其他引用再次使用都是改变后的值。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值