JavaSE--面向对象(2)

  1. 对象的创建流程
    在这里插入图片描述在这里插入图片描述
    第一步:主函数进栈
    第二步:执行new person()语句—在堆内存中开辟一个空间,并随机给他分配地址
    第三步:在对象空间中创建成员变量的空间–在对成员变量进行默认初始化 (但此时应该注意成员函数并不在对象空间中)
    第四部:在函数栈中创建局部变量–存放的是该对象在堆内存中的地址
    流程图如下:
    在这里插入图片描述对象的创建流程Ⅱ
    1.在堆内存中开辟一个空间,分配地址
    2.对成员变量经行默认初始化
    3.相应的构造函数进栈,此时先进行显示初始化
    4.接着在执行构造函数中的内容,针对性初始化
    5.构造函数执行完毕弹栈
    6.将对象的地址传给相应的变量
    在这里插入图片描述在这里插入图片描述流程图如下:
    在这里插入图片描述对象的创建流程Ⅲ
    在这里插入图片描述步骤如下:
    a.javac 编译 主类 有几个类就生成几个字节码文件
    在这里插入图片描述
    b.java 运行主类 Main.class
    将Main.class和Person.class文件加载进JVM中的方法区
    内存:寄存器:直接与CPU经行数据交互
    本地方法区:主要临时存储os的可执行代码
    方法区:主要临时存储App的可执行代码(Java所写代码为应用软件代码)
    栈:函数栈 主要运行函数
    堆:对象堆 主要存储对象数据
    c.方法区中分为静态方法区和非静态方法区
    静态方法区:主要存放静态变量 静态函数
    非静态方法区:主要存放构造函数和成员
    d.java Main
    让虚拟机在静态方法区中的Mai所属空间里找主函数
    e.将主函数加载进栈,开始运行
    f.执行主函数中的第一句
    在堆内存中开辟空间并分配地址
    按照类的描述 创建成员变量并对其进行默认初始化
    g.相应的构造函数从非静态方法区中的相应的类空间里读取并加入进栈
    h.构造函数刚进栈,则进行显示初始化
    i.开始执行构造函数中的代码,针对性初始化—为了区分那个对象调用这个函数,所以采用this关键字
    j.构造函数执行完毕弹栈,将对象的地址赋予左边
    k.在主函数中创建person类型的p变量空间
    l.p对象调用speak()方法,则从非静态方法区中加载speak()的代码
    m.在调用静态成员时,可以直接去静态方法区中找----同样在静态函数中打印变量,我们直接从局部到静态与堆无关
    流程图如下:
    在这里插入图片描述

  2. 成员变量初始化
    对象在堆中创建,其成员变量有默认初始化
    默认初始化—显示初始化—针对性初始化
    显示初始化—这样我们所创建的对象品牌名和车轮数就是一样的
    在这里插入图片描述针对性初始化–我们给一些对象特定的赋值
    在这里插入图片描述
    在这里插入图片描述

  3. 构造函数–构造器
    如果一个类中没有定义任何构造函数,则会有一个隐藏的无参构造函数
    表达形式:
    权限修饰符 类名(参数列表){
    return;
    }
    在这里插入图片描述如果一旦构造出其他构造函数,则默认无参的构造函数就不存在了,所以建议一般把无参函数都写出来。

  4. 构造函数与成员函数的区别?
    构造函数在对象创建时就执行了,而且只执行一次。
    构造函数不需要返回值
    构造函数可以用任意权限修饰符
    构造函数可以调用成员函数
    构造函数可以调用构造函数(this调用当前类中的其他构造函数),但构造函数之间不能相互调用,而且this…必须在第一句
    成员函数是在对象创建后,需要使用时才被对象调用,并可以被多次调用。
    成员函数可需可不需
    成员函数可以用任意权限修饰符
    成员函数可以调用成员函数
    成员函数不能调用构造函数

  5. 成员变量和局部变量的区别
    成员变量:对象的特有属性
    局部变量:函数中所创建的变量
    a.存储位置
    成员变量:存在于堆内存中对象的所属空间里
    局部变量:存在于栈内存中函数的所属空间里
    在这里插入图片描述b.生命周期
    成员变量:随着对象的创建而存在,随着对象销毁而消失
    局部变量:随着函数的进栈而存在,随着函数弹栈而消失
    c.初始化
    成员变量:有默认初始–显示初始化–针对性初始化
    局部变量:必须初始化才能被调用
    下述情况就是错误描述,无法打印a
    在这里插入图片描述d.作用域
    成员变量:全局可用
    局部变量:在其最近的一对{ }里面

  6. 静态变量和成员变量有何区别
    a.存储位置
    静态变量在静态方法区中类所属的空间里
    成员变量再堆内存中对象的所属空间里
    b.生命周期
    静态变量随着类(.class文件)的加载而存在,随着程序的结束而结束
    成员变量随着对象的创建而存在,随着对象的消亡而消失
    c.调用方式
    静态变量可以对象调用,类调用
    成员变量只能对象调用
    d.别名
    静态变量属于类,也叫类成员
    成员变量属于对象,也叫对象特有属性

  7. static关键字
    可以修饰成员变量 —静态变量
    如果若干个同类对象中存在相同的属性值的话,那么这个属性值就可以抽出来定义为静态函数 在这里插入图片描述 可以修饰成员函数 —静态函数
    定义静态函数的唯一条件:不直接调用成员!
    静态成员是类成员—由类可以直接调用
    特有成员是对象成员—由对象可以直接调用
    静态成员也可以直接由对象调用

  8. final 修饰变量
    表示该变量所存储的地址不可改变,但可以更改地址所对应的数据中的值
    如果final修饰成员变量,则必须初始化,就不能在被修改值
    一般而言不会给成员变量加final
    在这里插入图片描述

发布了22 篇原创文章 · 获赞 3 · 访问量 348

猜你喜欢

转载自blog.csdn.net/qq_45161607/article/details/103308141