类与对象
面向过程与面向对象的区别
面向过程的思维方式是:我该怎么做,所有事情由自己一个人一件一件做完
面向对象的思维方式是:我让谁去做,所有事情由一群人去做,至于这件事情怎么完成就是他们自己的事情。
例如:公司打扫卫生(擦玻璃、扫地、拖地、倒垃圾等),按照面向对象的程序设计方式会思考“我该让谁来做,如小明擦玻璃、让小丽扫地、让小郭拖地、让小强倒垃圾等”,这 里的“小明、小丽、小郭、小强”就是对象,他们要打扫卫生,怎么打扫是他们自己的事,反正最后一群对象合力把公司卫生打扫干净了。
对象在代码中的实现
描述小汽车。
分析:
事物的特点(属性):颜色、轮胎个数。
事物的行为(功能):运行。
发现:事物其实就是由特点(属性)和行为(功能)组成的。
可以简单理解:属性就是数值,其实就是变量;行为就是功能,就是方法。
小汽车 {
颜色;
轮胎个数;
运行() { }
}
public class Car {
String color;
int wheel;
void run() {
System.out.println(color + ":" + wheel);
}
}
public class TestCar {
public static void main(String[] args) {
Car c = new Car();
c.color = "红色";
c.number = 4;
c.run();
Car c1 = new Car();
c1.color = "黑色";
c1.number = 4;
c1.run();
}
}
内存图
java文件经过编译生成class文件,文件首先进入方法和数据共享区。然后执行程序,进入程序入口,main()方法也在方法和数据共享区。程序一看到main方法就把它拉近栈中了。
首先执行Car c = new Car();创建对象,在堆中开辟内存空间,并且给属性赋初值,color赋初值null,wheel赋初值0.给new出来的内存空间给一条十六进制的地址并传递给栈中的main()方法中的对象。系统将根据这个十六进制的地址值去堆中寻找数据。接下来开始给属性赋值。赋值完毕接着调用run()方法。方法在栈中寻找,寻找到后并执行方法内部的代码。
类与对象的区别
类在客观世界上是不存在的。
类就像一个模子,确定对象将会拥有的特征(属性)和行为(方法)。
类的特点:类是对象的模型;
类是具有相同属性和方法的一组对象的集合。
成员变量和局部变量
1:定义的位置不同
定义在类中的变量是成员变量
定义在方法中或者{}语句里面的变量是局部变量
2:在内存中的位置不同
成员变量存储在堆内存的对象中
局部变量存储在栈内存的方法中
3:声明周期不同
成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失
局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失
4:初始化不同
成员变量因为在堆内存中,所有默认的初始化值
局部变量没有默认的初始化值,必须手动的给其赋值才可以使用。
基本数据类型和引用数据类型作为参数传递之内存图
基本数据类型和引用数据类型作为参数传递的唯一区别就是:基本数据类型的值在栈中,不进堆。
而引用数据类型的值在堆中,栈中存储的是堆内存中的十六进制的地址值。
如果执行一个方法改变基本数据类型的值,他只会改变该方法内部的值,出栈之后并不影响main()方法中的值。
如果执行一个方法改变引用数据类型的值,他会根据这个地址去改变堆中的值,然后出栈后输出该类型中的数据后会改变main()方法中的值。