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

  • 相关阅读:
    MongoVUE破解方法(转)
    Apache和IIS共享80端口,支持多域名
    让作业飞吧,与屌丝兄弟们分享我的分布式作业调度平台 【拥抱开源,拥抱作业调度的神器Quartz.net】
    关于Nbearlite 访问PostgreSql,MySql,Sqlite的Bug
    php5.4.6/5.3.16/5.2.17安装(In windows),配置(转)
    MSSQL翻页存储过程
    话说客户端连接mongoDB的连接参数(转载)
    关于Windows频繁打开关闭端口时出现的问题(转至老赵)
    zeromq的几种模式(转)
    如何设置代理服务器上网
  • 原文地址:https://www.cnblogs.com/Java-125/p/8651949.html
Copyright © 2020-2023  润新知