当前位置:   article > 正文

第八章:面向对象编程(1)—— 类与对象_c++开发的华为手机怎面象对像

c++开发的华为手机怎面象对像

目录

一、类与对象的关系

二、类与对象的创建

(一)类的创建

(二)对象的创建

三、类与对象的内存机制


一、类与对象的关系

说明:模板(类)可以设定参数(成员:属性和方法)==> 生成实体(对象)==> 传递参数 ==> 访问实体,调用参数。

举例:手机图纸(类)可以设定尺寸和功能 ==> 生成华为手机(对象)==> 尺寸为12寸,智能识别功能 ==> 查看华为手机的说明,就能知道尺寸为12 和 智能识别功能。

结论:类就是模板,对象就是通过模板而生成的


类就是数据类型,对象就是变量名

  • 类相当于变量的数据类型,作为标识符的数据类型
  • 对象相当于变量名,作为数据类型的标识符
对象与变量的区别
对象的 = 号 右侧的赋值变量的 = 号 右侧的赋值
创建对象[new](类似赋值常量值)常量
对象名(类似赋值)变量(同类型 or 可转型)

二、类与对象的创建

(一)类的创建

创建方式:[访问修饰符]  class 类名 {  }

代码说明:类的创建细节

  • 一般来说,主执行的类通常放置在最上方(方便调用查看)
  • 类的访问修饰符只能用 public 和 默认(无访问修饰符),但是 public 只能有一个
  1. class Cat{ } //类可以创建在任何类的上方 or 下方,不影响参数传递
  2. public class Demo { } //源文件只能存在(一个)public 和 (多个)默认
  3. public class Fish{ } //这样会报错(只能有一个public)
  4. class Dog{ }

(二)对象的创建

创建对象的常用说法:创建对象;创建实例化;实例化对象

直接创建:类名  对象 = new 类名();   


先声明,后使用:类名 对象 ;对象 = new 类名() 


匿名对象:new 类名();

  • 在不同类中,可创建本类的对象,也可以创建其他类的对象
  • 对象的命名跟变量名一致,必须遵守标识符规则

代码说明:对象在类中作为成员创建,实际上是属性

  1. class Test {
  2. // ★ 细节:在类中可以直接创建对象,看似对象实际上是属性
  3. // ★ 注意:只有直接创建的方式可以在类中创建
  4. static Test a = new Test(); //可以创建自身的类对象
  5. Demo b = new Demo(); //可以创建非自身的类对象
  6. }
  7. public class Demo {
  8. /* ★ 在main(有static)方法中调用在类中直接创建的对象(属性)的要求 ==> 由a说明
  9. * 1、对象(属性)必须带有 static 的关键字
  10. * 2、在方法内直接用静态调用方式
  11. * */
  12. public static void main(String[] args) {
  13. System.out.println(Test.a); //静态调用方式:类名.对象名【实际上是调用属性】
  14. }
  15. /* ★ 在(非static)方法中调用在类中直接创建的对象(属性)的要求 ==> 由b说明
  16. * 1、对象(属性)不能带有 static 的关键字
  17. * 2、在方法内必须创建对象后,才能代用
  18. * */
  19. public void mthod() {
  20. Test test = new Test();
  21. System.out.println(test.b);
  22. }
  23. }

代码说明:对象通常创建在main方法中 or 非属性成员的成员中,此处以main方法举例


代码说明:普通对象和匿名对象的使用区别

  1. class Test{
  2. int num = 0;
  3. public void funt(){
  4. System.out.println(++num); //每次执行方法,输出自增num
  5. }
  6. }
  7. public class Demo {
  8. public static void main(String[] args) {
  9. // ★ 结论:匿名对象,每次执行都算是第一次执行,不保存数据
  10. //普通对象:执行会存储值
  11. Test test = new Test();
  12. test.funt(); //1
  13. test.funt(); //2
  14. //匿名对象:执行时不会存储值
  15. new Test().funt(); //1
  16. new Test().funt(); //1
  17. }
  18. }

三、类与对象的内存机制

JVM的内存由栈空间、堆空间、方法区(元空间)组成

  • 栈空间:放置引用、方法栈等,利用引用指向堆中地址
  • 堆空间:放置数据的地址
  • 方法区:放置真实数据(实际值)

在JDK1.8后,方法区从堆空间中剥离出来,并将原来的方法区变成元空间堆空间存放地址,元空间内有存放实际值,指向堆空间的地址(方法区变成元空间,用于存放实际值和加载类信息

创建类与对象后,运行时在JVM的内存机制流程图

流程分析

  1. 加载Cat类信息(Cat.class),只加载一次,默认初始化属性(Cat 初始化)【堆空间、元空间】
  2. 在堆中分配空间空间地址【堆空间】
  3. 创建对象(cat)【栈空间】, 完成对象初始化【堆空间、元空间】
  4. 将对象在堆空间中的地址,返回给对象(cat)【栈空间、堆空间】

代码实现

  1. public class Demo {
  2. public static void main(String[] args) { //<== 调试点
  3. //创建对象
  4. Cat cat = new Cat();
  5. System.out.println(cat); //空间地址:Cat@16b98e56
  6. System.out.println(cat.name); //输出默认值:小白(在Cat@493:Cat.name = "小白”)
  7. System.out.println(cat.color); /* 注意:必须通过调用才能得知*/
  8. //对象Cat的属性值
  9. cat.name = "小花";
  10. cat.age = 12;
  11. cat.color = "花色";
  12. System.out.println(cat.name + " " + cat.age + " " + cat.color);
  13. }
  14. }
  15. class Cat{ //当创建对象运行时,类只会加载一次
  16. String name = "小白"; //初始化
  17. int age; //未初始化,则值为默认值
  18. String color;
  19. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/1011156
推荐阅读
相关标签
  

闽ICP备14008679号