目录
1. 生活中的面向对象和面向过程对比
烤羊排:
a. 找一个卖烤羊排的店铺
1. 导航到店铺
2. 找个位置,点菜烤羊排
3. 等
4. 吃 埋单
5. 走
b. 自己做
1. 买羊排 ==> 宁夏盐滩羊
2. 准备的调料 ==> 葱,姜,蒜,皮牙子,孜然,辣椒,盐
3. 半扇羊排焯水(葱,姜,蒜),打去浮沫,煮 15 分钟
4. 烤制 烤盘铺锡纸
烤箱预热 5 分钟(220 上下火)
220度上下火 15 分钟 翻面 10 分钟 190度
5. 出炉
6. 孜然,辣椒,盐 蘸料开吃
7. 打扫卫生卤牛肉
a. 找个熟食店购买
一斤 85 ~ 95
一切打包带走
吃
b. 自己做
1. 买牛肉(牛腩,上脑)
2. 调料
小茴香,八角,肉蔻,草果,花椒,麻椒,干辣椒,桂皮,香叶,白芷
白酒 老抽 生抽 黄豆酱 耗油 冰糖 葱,姜,蒜,料酒
3. 牛肉 冷水下锅,焯水(葱,姜,料酒)
4. 香料先泡水,捞出,泡酒
5. 炒糖色,下葱,姜,蒜炒制,下香料(酒),酱油炒,牛肉下!!!加热水
6. 老抽调色,盐,黄豆酱,耗油,葱段,蒜粒,冰糖
7. 高压锅 35 分钟 / 小火炖 50 分钟
8. 肉捞出,卤汁过滤保存
9. 吃!!!拌面,拌饭面向对象
找合适的人,办合适的事
面向过程
亲力亲为,自力更生
2. 类和对象
类 | 对象 |
---|---|
人类 | 吕布,貂蝉,雷军,乔布斯,马云,麻花藤,何同学,彭于晏,Faker |
猫类 | 八九,汤姆,哆啦A梦,黑猫警长,贝斯特,虹猫,噬元兽,浩东家的虎妞 |
狗类 | 八公,哮天犬,大黄,豆豆,糯米,神犬小七 |
汽车类 | 磊哥的领克01,万峰的车,蝙蝠侠的蝙蝠战车,变形金刚里的大黄蜂,擎天柱,车牌号豫A16T1T的车 |
类:
针对于一类事物的描述,包括属性描述和行为描述
人类为例
属性描述: 身高,体重,年龄,姓名,性别,发量
行为描述: 吃饭,睡觉,写代码,打游戏对象:
具体的,唯一的,独立的,特殊的个体
3. Java 中定义类的格式【重点】
格式:
class 类名 {
属性描述
采用变量形式,存储对应的数据,进行属性描述
【Field 成员变量】
行为描述
采用方法形式,使用方法声明明确方法所需参数和返回值信息,同时完成对应的功能。
【Method 成员方法】
}
类名有什么要求:
见名知意。大驼峰命名法
3.1 Java定义类之成员变量
class Person {
/* 属性描述 ==> 【Field 成员变量】 */
/*
id 成员变量,数据类型为 int 类型,用于描述当前类对应对象的 id 属性
id 成员变量对应的具体数据,需要在创建对象之后给予赋值操作者
*/
int id;
/*
name 成员变量,数据类型为 String 字符类型,用于描述当前类对应对象的
name 属性,当前 Person 对象 人类对象的姓名
*/
String name;
/*
age 成员变量,数据类型为 int 类型,用于描述当前类对应的 age 属性
age ==> 年龄
*/
int age;
}
3.2 Java 定义类之成员方法
/**
* 自定义类,当前类没有使用 public 关键字
* 类名和文件名不一致,
* Person 类型,类名符合见名知意,大驼峰命名法
*/
class Person {
/* 行为描述 ==> 【Method 成员方法】 */
/**
* Person 类吃饭(eat)行为描述,参数为字符串类型,要求用户调用时
* 提供字符串类型参数,告知吃什么食物
*
* @param food 食物的名称 String 字符串类型
*/
public void eat(String food) {
System.out.println("今天吃" + food);
}
/**
* Person 类睡觉(sleep)行为描述
*/
public void sleep() {
System.out.println("说出来你可能不信,我被床封印了");
}
/**
* Person 类编程/写代码(coding)行为描述
*/
public void coding() {
System.out.println("键盘敲烂,月薪过万");
}
}
3.3 Java 创建对象方式
比葫芦画瓢
Scanner sc = new Scanner(System.in);必须清楚的知识点:
1. Java 开发中存在 名称+小括号 的结构,除分支循环之外,都是方法
sleep(); eat(String food); coding();
2. Java 中首字母大写的标识符,按照规定只能是 类名,接口名
拆分 Scanner 扫描器创建过程:
Scanner:
类名,数据类型名,表示当前创建的是 Scanner 类对应对象。或者说创建的对象数据类型为 Scanner 类型
sc:
对象名称,变量名称,同时也是一个【引用数据类型】
new:
1. 根据当前数据类型所需,在内存的【堆区】申请对应的内存空间。
补充:创建对象时根据【构造方法】的名称,明确当前申请空间对应的数据类型是哪一个类型,
从而确定数据类型占用的空间大小
2. new 关键字会将申请的内存空间中所有数据内容全部清除干净
Scanner(实际参数);
Scanner() 构造方法,构造方法要求方法名必须是类名,用于在创建对象的过程中,明确创建对象的数据类型。
而且在 Java 代码中,有且只允许构造方法使用类名,其他方法一律不允许!!!目前创建对象格式
类名 对象名 = new 构造方法(实际参数);
/*
创建对象/实例化对象的格式:
类名 对象名 = new 构造方法(所需参数);
*/
Person p1 = new Person();
/*
Person@15db9742
Person 是类型描述,表示当前对象对应的数据类型是什么
@ 在哪里!!!
15db9742 十六进制,是当前对象在内存空间的地址。门牌号(银屏路25号)
*/
System.out.println(p1);
3.4 通过对象操作成员变量赋值/取值
比葫芦画瓢:
int[] arr = new int[10];
arr.length ==> 得到数组的容量
. ==> 的对象操作成员变量赋值/取值格式
对象名.成员变量
可以执行赋值操作,也可以进行取值操作
/*
Person 类对象操作成员变量
目前 Person 类内对应的成员变量有
int id; String name; int age;
格式:
类对象.成员变量
*/
// 通过类对象操作成员变量赋值操作 磊哥花名:骚磊,苟磊,狗磊,狗鸽,蛋哥,蛋总,臀哥,翘臀
p1.id = 1;
p1.name = "苟磊";
p1.age = 16;
// 通过类对象操作成员变量取值操作
System.out.println("ID: " + p1.id);
System.out.println("Name: " + p1.name);
System.out.println("Age: " + p1.age);
3.5 通过对象调用成员方法
比葫芦画瓢:
Scanner sc = new Scanner(System.in);
int类型数据 = sc.nextInt();
double类型数据 = sc.nextDouble();
float类型数据 = sc.nextFloat();通过对象调用成员方法的格式:
对象.方法名(实际参数);
/*
Person 对象调用执行成员方法
对象.成员方法();
目前 Person 类内对应的成员方法有
void eat(String); void sleep(); void coding();
*/
// 通过 Person 对象 p1 调用 eat 方法,方法所需参数为 String 类型
p1.eat("土豆丝+豆芽+烙馍");
p1.sleep();
p1.coding();
4. 构造方法【鸡肋】
4.1 Java 编译器提供的无参数构造方法
Java 编译器是发现当前类没有自己声明/定义构造方法,会自动提供一个无参数构造方法供程序员使用,如果当前 Java 代码中存在任意一个构造方法,Java 编译器不再提供对应的无参数构造方法。
4.2 Java 中构造方法
构造方法的作用:
1. 构造方法的名称必须是类名,用于提供给 new 关键字使用,明确当前实例化/创建的对象对应的数据类型是什么类型
2. 构造方法有且只有【初始化】 new 关键字 + 构造方法 实例化/创建 对象数据内容功能。构造方法格式:
public 类名(初始化操作必要的参数) {
初始化赋值语句,给予成员变量赋值操作。
}
4.3 构造方法总结
1. 构造方法格式
public 类名(必要参数) {
成员变量赋值语句;
}2. 实例化/创建对象的格式
类名 对象名 = new 构造方法(实际参数);3. 实例化对象/创建对象 是由 new + 构造方法 完成
a. new 关键字根据构造方法名称,明确对应数据类型,在内存【堆区】申请对应的空间
b. new 关键字将申请的空间进行清理数据,打扫卫生
c. 构造方法利用参数内容和赋值语句,给予成员变量赋值操作
5. 对象内存分析图