一.引出类与对象
问:如果要求输出小明、小红等人的信息,其中相关信息有姓名、年龄、性别、身高等。如何写相关程序?
1.用多个变量定义这些信息:
String Mname = "小明";
int Mage = 22;
char Mgender = '男';
String Hname = "小红";
int Hage = 22;
char Hgender = '女';
2.用数组来表示
String M = {"小明", "22", "男"};
String H = {"小红", "22", "女"};
上面的两种方式实现存在的问题:
1.如果想再添加几个属性,如星座、爱好等。那就需再定义变量来存储人的信息,一个人的信息被拆解成多个变量,小明小红相关信息数据的统一被割裂了,显然不利于数据的管理。
2.用数组来定义显然变量定义变少了,但是下标与属性之间的对应关系也需要声明,十分麻烦。
引出类这个概念:
将小明小红的信息共同点提取,抽象成概念,即人类。
小明和小红就是对人类的引用,小明和小红就是对象。
二.类与对象
类是抽象的、概念的,代表某一类事物,如人类、猫类;它是数据类型
对象是具体的、实际的,代表一个具体事物,即实例
类是对象的模板,对象是类的一个个体,对应一个实例
三.属性
属性也可以叫成员变量、字段,它是类的一个组成部分,可以理解为它是描述某类事物的特征。
1.属性定义同变量:访问修饰符 属性类型 属性名称
2.属性的定义类型可以是基本数据类型,也可以是引用类型
3.属性如果不赋值,同数组一样有相同的默认值。
四.创建对象
1.先声明后分配空间即创建
//设有个Person类
Person p;
p = new Person();
2.直接创建
Person p = new Person();
访问对象属性:对象名.属性名
3.对象在内存的情况:
先分析Java的内存:
栈:一般存放基本数据类型(局部变量)
堆:存放对象、数组等
方法区:常量池(字符串、常量),类加载信息
结合代码及示意图分析,有如下代码:
Cat cat = new Cat();
cat.name = "小白";
cat.age = 12;
cat.color = "白色";
流程:
1.先加载类的信息(属性和方法信息),只会加载一次
2.在堆中分配空间,进行默认初始化,如cat.name = null, cat.age = 0,cat.color = null;
3.把地址赋给cat,cat就指向对象。PS:cat只是对象的引用,对象实际指的是在堆分配的这块空间。
4.进行指定初始化,cat.name = "小白"......