面向对象初识

目录

1. 生活中的面向对象和面向过程对比

2. 类和对象

3. Java 中定义类的格式【重点】

3.1 Java定义类之成员变量

3.2 Java 定义类之成员方法

3.3 Java 创建对象方式

3.4 通过对象操作成员变量赋值/取值

3.5 通过对象调用成员方法

4. 构造方法【鸡肋】

4.1 Java 编译器提供的无参数构造方法

4.2 Java 中构造方法

4.3 构造方法总结

5. 对象内存分析图


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. 对象内存分析图

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值