目录
类与对象(OOP)
概念:
- 类是抽象的、概念的,代表一类事物,例如:猫类、犬类、人类。
- 对象是具体的、实际的,代表一个具体的事物、一个实例,例如:老王(人类)。
- 类是对象的模板,对象是类的一个个体,对应一个实例。
对象内存布局(对象的存在形式):
说明(写的乱):
- 首先把类信息加载到方法区,再分配空间
- name、color是字符串,引用类型 会存到常量池内并由堆内指向(引用类型的存放方式)
- 对象和数组都是引用类型(存在栈内),所以会指向一个地址
- 堆内有三个空间代表三个属性
- int是基本数据类型直接存在堆内
属性/成员变量
介绍:
- 从概念或叫法上看:成员变量 = 属性 = field(字段)(即 成员变量是用来表示属性的)。
- 属性是类的一个组成部分,可以是基本数据类型和引用类型(对象,数组)。
属性注意事项:
- 属性的定义语法同变量,示例:访问修饰符 属性类型 属性名,有四种访问修饰符(public、proctected、默认、private)
- 属性的定义类型可以为任意类型,包含基本数据类型和引用数据类型
- 属性如果不赋值,有默认值,规则和数组一致。具体说: int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000, boolean false,String nul
class Person {
//四个属性
int age;
String name;
double sal;
boolean isPass;
}
class PropertiesDetail {
//编写一个 main 方法
public static void main(String[] args) {
//创建 Person 对象
//p1 是对象名(对象引用)
// new Person() 创建的对象空间(数据) 才是真正的对象
Person p1 = new Person();
System.out.println("\n 当前这个人的信息");
System.out.println("age=" + p1.age + " name=" + p1.name +
" sal=" + p1.sal + " isPass=" + p1.isPass);
//输出:age=0 name=null sal=0.0 isPass=false
}
}
如何创建对象/访问属性
创建对象:
- 先声明再创建:Cat cat1; cat1 = new Cat();
- 直接创建:Cat cat1 = new Cat();
访问属性基本语法:对象名.属性名; ( cat.name ; cat.age; cat.color)
类和对象的内存分配机制
相对于有两个名字,两个引用。就像一个人的乳名和大名。
再看一遍视频!p199
Java内存的结构分析:
- 栈: 一般存放基本数据类型(局部变量)。
- 堆: 存放对象(Cat cat , 数组等)。
- 方法区:常量池(常量,比如字符串), 类加载信息。
- 示意图 [Cat (name, age, price)。
Java 创建对象的流程简单分析:
- 先加载 Person 类信息(属性和方法信息, 同一个类只会加载一次,再创建此类的对象时不会再加载属性和方法)。
- 在堆中分配空间, 进行默认初始化(看规则)。
- 把地址赋给 p , p 就指向对象。
- 进行指定初始化, 比如 p.name =”jack” p.age = 10
内存练习:
说明:
- b=a,相当于b也指向上一个创建的对象