类与对象,对象内存布局_韩顺平听课笔记

1.类与对象(OOP)解决的问题:(数据管理,提升效率);
单独变量存储信息,不利于数据的管理(将一个对象的信息拆分了);
数组存储信息,数据类型体现不出来(姓名,年龄都存储在一个数组里),通过下表获取信息,造成变量名字和内容的对应关系不明确(person[1]取出person.age),不能体现对象的行为;

2.类:自定义的数据类型,对象[属性,行为]:具体的数据;类是对象的模板;

3.对象内存布局,JVM分析;基本类型直接存放在堆中,引用类型在堆中存放地址,实际数据存放在方法区中的常量池;对象new时,会在方法区加载类信息(属性,行为);栈中存放对象引用cat(对象名,对象地址);new cat() 创建的对象空间才是真正的对象;

4.属性,成员变量=属性=field(字段);属性可以是基本数据类型或引用类型

5.属性注意细节;1)属性的定义:访问修饰符 属性类型 属性名;2)基本数据类型或引用类型;3)属性不赋值,有默认值,规则同数组,0,0.0,\u0000,false,null

6.创建对象两种形式:先声明后创建,直接创建;
Cat cat; // 堆:cat——>[null]
cat = new Cat(); // 栈:创建一个内存空间,将地址引用给cat——>[0x1122]

7.类与对象内存分配机制

  • 加载Person类信息(只加载一次):属性信息,方法信息;Person p1
  • 堆中开辟空间,地址,属性为默认值:age——>0,name——>null;new Person();
  • 堆中对象地址,返回给引用(栈中); p1——>[0x0011]
  • p1.age = 10; 将10放入堆中p1对象内,p1.age——>10
  • p1.name = "小明"; "小明"放入方法区的常量池中,地址放回给堆中p1对象,p1.name——>[0x0022]
  • Person p2 = p1; p2——>[0x0011],p2指向和p1相同的对象

8.Java内存结构:

  • 栈:一般存放基本数据类型(局部变量)
  • 堆:存放对象(Cat cat,数组等)
  • 方法区:常量池(常量,比如字符串),类加载信息

9.对象机制练习,空指针异常

posted @ 2021-08-29 18:41  CH0701  阅读(103)  评论(0)    收藏  举报