1.类定义
类:类代表某类数据的共性,例如 花猫 白猫 都属于猫类。类也是一种数据类型。
数据类型代表同种数据的类型,因此 int 与 猫类 都属于数据类型。一类是整数数据,一类是猫数据。
类具有属性与方法,例如猫类的属性可以有 花色,年龄等,方法是类的行为,可以理解为这类数据可以干什么。
对象就是具有不用的属性和方法的类。即类的实例化。java中创建对象: 类名 对象名 = new 类名() 例: Cat cat1 = new Cat()
2.对象内存分析
类是引用数据,引用数据保存的地址。
在 new Cat () 创建对象时,会先将类信息加载至方法区。
同时在堆开出一块空间,存放数据或地址(字符串存放在方法区的常量池,堆空间中存放字符串的空间保存的是方法区内字符串对应的地址)。
再将堆内存的地址返回至栈内存保存。其中 cat 是对象名,堆中的空间才是对象本身。
3.属性与方法
3.1 属性
3.2 成员方法
3.2.1 方法传参机制
基本数据类型传参传递的是值,形参的改变不影响实参。具体来说就每当调用一个方法时,会在栈内分配一块专门用来执行方法的空间,对于基本数据类型来说,该空间内的参数是独立的,不影响其他的参数。
引用数据类型传参传递的是地址,因此分配的方法空间参数改变时,会影响其他的参数。(形参 实参 都指向同一个堆地址空间,所以实参 形参 会互相影响)
3.2.2 方法重载
java 中允许同一个类中,多个同名方法的存在,但要求 形参列表不一致!
返回类型 不同 其他相同 仍然不算重载。
3.2.3 可变参数
4.作用域
5.构造器
用来在创建对象时初始化属性。形式:[修饰符] 方法名(形参列表){}。构造器 不是 创建对象,而是对对象的初始化 先new 创建 对象 系统再自动调用, 利用构造器初始化。
分析上图对象创建流程:
执行 new Person(xxx)后:
1.在方法区加载 类信息
2.堆中分配空间(得到一个地址)
3.默认初始化 int 为0 ,String 为 null
4.再 根据类属性 初始化 age = 90 name = null
5.再根据构造器初始化 name = 小倩 age = 20
6 将堆空间(对象的本质)地址 返回 给P。(p只是对象名,对对象的引用,对象本质是堆空间)
6 this关键字
观察代码发现, 若构造器的形参名 和 属性名 重名,则相当于在构造器内声明了一个 局部变量 name,然后传入参数时 String name = 传入实参。再进行 name = name 。此时name将原本代表属性的 name 替代,此时的 name = name 不代表 将传进的参数 赋给 属性name 而代表 将传进的参数name 赋给 自己 name 。 当调用方法 打印 属性时 ,就会发现 属性并没有被 构造器 初始化。因此引出this。
this 保存 一个 指向 具体对象的 地址。随着对象的创建 而产生。如下图,this与对象名 一样 都代表堆对象的引用。this.XX 可以调用 属性 方法,构造器等。。