-
看一个养猫问题
张老太养了两只猫:一只名字叫小白,今年三岁,白色。还有一只叫小花,今年一百岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫猫-
使用现有的技术解决
public class Object01 { public static void main(String[] args) { //一、单独变量来解决 => 不利于数据的管理(把一只猫的信息拆解) //第一只猫信息 String cat1Name = "小白"; String cat1Color = "白色"; int cat1Age = 3; //第二只猫信息 String cat2Name = "小花"; String cat2Color = "花色"; int cat2Age = 100; //二、数组 => (1)数据类型体现不出来 // (2)只能通过[下标]获取信息,造成变量名字和内容的对应关系不明确 // (3) 不能体现猫的行为 String[] cat1 = {"小白", "3", "白色"}; String[] cat2 = {"小花", "100", "花色"}; } }- 现有技术解决的缺点分析
- 不利于数据的管理
- **效率低======>引出我们的新知识:类与对象(OOP)**
- 现有技术解决的缺点分析
-
-
一个程序就是一个对象,有很多事务(对象[属性,行为])
-
类与对象的关系示意图
- 对上图说明
- 类就是数据类型,比如Cat
- 对象就是一个具体的实例
- 对上图说明
-
快速入门-面向对象的方式解决养猫问题
public class Object01 { public static void main(String[] args) { //使用oop面向对象解决 //实例化一只猫(创建一只猫对象) Cat cat1 = new Cat(); cat1.name = "小白"; cat1.age = 3; cat1.color = "白色"; Cat cat2 = new Cat(); cat2.name = "小花"; cat2.age = 100; cat2.color = "花色"; //怎么访问对象的属性呢 //第一只猫信息:小白 3 白色 //第二只猫信息:小花 100 花色 System.out.println("第一只猫信息:" + cat1.name + " " + cat1.age + " " + cat1.color); System.out.println("第二只猫信息:" + cat2.name + " " + cat2.age + " " + cat2.color); } } class Cat { //属性 String name;//名字 int age;//年龄 String color;//颜色 } -
对象在内存中存在的形式
-
属性/成员变量
-
基本介绍
-
从概念或叫法上看:成员变量 = 属性 = field(即 成员变量是用来表示属性的)
-
属性时类的一个组成部分,一般是基本数据类型,也可以是引用类型(对象,数组)
-
class Car { String name;//属性,成员变量,字段 field double price; String color; String[] master;//属性可以是基本数据类型,也可以是引用数据类型(对象,数组) }
-
-
注意事项和细节说明
- 属性的定义语法同变量,示例:访问修饰符 属性类型 属性名;
- 访问修饰符:控制属性的访问范围,有四种访问修饰符:public proctected default private
- 属性的定义类型可以为任意类型,包含基本类型和引用类型
- 属性如果不赋值,有默认值,规则和数组一致
- 属性的定义语法同变量,示例:访问修饰符 属性类型 属性名;
-
-
-
如何创建对象
- 先声明在创建
Cat cat;//声明对象
cat = new Cat();//创建对象 - 直接创建
Cat cat = new Cat();
- 先声明在创建
-
如何访问属性
- 基本语法
- 对象名.属性名
cat.name;
cat.age;
cat.color;
- 对象名.属性名
- 基本语法
-
类与对象的内存分配机制
- java内存的结构分析
- 栈:一般存放基本数据类型(局部变量)
- 堆:存放对象(Cat cat,数组等)
- 方法区:常量池(常量,比如字符串),类加载信息
- java创建对象的流程简单分析
Person p = new Person();
p.name = “jack”;
p.age = 10;- 先加载Person类信息(属性和方法信息,只会加载一次)
- 在堆中分配空间,进行默认初始化(看规则)
- 把地址赋值给p,p就指向对象
- 进行指定初始化
- java内存的结构分析



