Java基础知识学习05-类与对象

类与对象

面向过程与面向对象的区别

面向过程的思维方式是:我该怎么做,所有事情由自己一个人一件一件做完

面向对象的思维方式是:我让谁去做,所有事情由一群人去做,至于这件事情怎么完成就是他们自己的事情。

      例如:公司打扫卫生(擦玻璃、扫地、拖地、倒垃圾等),按照面向对象的程序设计方式会思考“我该让谁来做,如小明擦玻璃、让小丽扫地、让小郭拖地、让小强倒垃圾等”,这           里的“小明、小丽、小郭、小强”就是对象,他们要打扫卫生,怎么打扫是他们自己的事,反正最后一群对象合力把公司卫生打扫干净了。

对象在代码中的实现

   描述小汽车。

   分析:

   事物的特点(属性):颜色、轮胎个数。

  事物的行为(功能)运行。

   发现:事物其实就是由特点(属性)和行为(功能)组成的。

   可以简单理解:属性就是数值,其实就是变量;行为就是功能,就是方法。

  小汽车 {

         颜色;

        轮胎个数;

     运行() { }

     }

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()方法中的值。

posted @ 2018-03-26 16:39  低调的小孩儿  阅读(151)  评论(0编辑  收藏  举报