day06【类与对象、封装、构造方法】

day06【类与对象、封装、构造方法】

一. 面向对象思想概述

1. 面向过程和面向对象

  1. 机器语言 M423 0000 0010
  2. 汇编语言 MOV 0 2
  3. 高级语言 C(面向过程), C++, Java(面向对象)
  • 面向过程: 强调过程(强调做一件事其中的每一个步骤)
  • 面向对象: 做一件事, 不自己做, 而是找对象来帮我完成

举例

  • 面向过程: 拿盆子 >> 放衣服 >> 放洗衣粉 >> 倒水 >> 泡 >> 搓 >> 漂洗 >> 拧干 >> 晾起来

  • 面向对象: 衣服放到洗衣机 >> 放洗衣粉 >> 按下开关 >> 晾起来

    ​ 叫女朋友来帮我洗

二. 类与对象

  • 重点掌握简易格式

1. 什么是类和什么是对象

  • 类: 一类事物属性行为的集合.
  • 对象: 该类事物的具体体现.

2. 如何定义类

  • 类: 就是Java中使用class定义出来的类.
    • 属性(成员变量): 定义格式和以前的变量是一样的, 只是位置发生了改变, 在类中方法外.
    • 行为(成员方法): 定义格式和以前基本相同, 只是去掉了static.
public class Person {


    // 类中方法外
    // 姓名
    String name;

    // 年龄
    int age;

    // 方法
    // 吃饭
    public void eat() {
        System.out.println("人要吃饭");
    }

    // 睡觉
    public void sleep() {
        System.out.println("人要睡觉");
    }

}

3. 如何创建对象和使用对象

创建和使用对象, 在测试类中的主方法中去创建和使用.

(1) 创建对象
// 类名 对象名 = new 类名();
// 创建了一个Person对象, 对象名是p
Person p = new Person();
(2) 使用对象
// 使用属性: 对象名.属性名
p.name;
// 使用行为: 对象名.方法名()

在一个类中想使用另一个类中的内容, 需要先创建对象.

/**
 * 测试类
 */
public class PersonTest {
    public static void main(String[] args) {
        // 写代码, 模拟各种场景,
        // 来测试功能类中的内容是否正确

        // 创建了一个Person对象, 对象名是p
        Person p = new Person();

        // 对象名.属性名
        p.name = "杨超越";
        p.age = 20;

        // 打印
        System.out.println("姓名是: " + p.name + ", 年龄是: " + p.age);

        p.eat();
        p.sleep(8);



    }
}

4. 成员变量和局部变量

[外链图片转存失败(img-bUiE5ZhW-1564289778181)(assets/1563502911445.png)]

成员变量和局部变量的区别

描述位置不同作用域(所在的大括号)不同默认值不同
局部变量方法中或者方法声明上(参数列表)所在的方法中没有默认值
成员变量类中方法外所在的类中有默认值

局部变量在使用前, 必须赋值

数据类型默认值
整型(byte, short, int, long)0
浮点型(float, double)0.0
布尔(boolean)false
字符(char)‘\u0000’
引用数据类型null

三. 创建对象的内存图

四. 封装

  • 重点掌握标准格式

1. 封装的原则和格式

private: 可以修饰成员变量和成员方法, 作用: 被private修饰的内容, 只能在本类中被访问.

  • 隐藏属性: 将属性使用private修饰
  • 对外提供公共的访问方式: get/set方法

2. 优化1- this

  • 在set方法中出现了, 成员变量和局部变量同名.

    • 此时要遵循就近原则, 就出现了赋值语句变成了: 局部变量赋值给局部变量

    age = age; name = name;

this: 能够解决什么问题?

  • 当成员变量和局部变量同名的时候, 使用this.变量名 获取到的是成员变量.

3. 优化2-构造方法

  • 目标: 创建对象的同时, 给成员变量赋值.

构造方法

  • 格式:
修饰符 构造方法名(参数列表) {}

- 没有返回值类型,void都没有
- 构造方法的名字和类名相同

// 空参构造/ 无参构造
public 类名() {

}

// 有参构造/ 全参构造/ 满参构造
public 类名(参数列表) { // 小括号中有参数, 参数依据类中所有成员变量来写
	this.属性名 = 参数列表中局部变量的名字;
}

作用

  1. 用来创建对象(创建对象时, 一定调用了构造方法)
  2. 对类中的成员进行初始化(赋值)

注意事项:

  1. 如果类中没有手动给出任何的构造方法, 系统会默认提供空参构造
  2. 如果类中手动给出了任意一个构造方法, 系统将不会默认提供这个空参构造

五. 标准的JavaBean

  • 功能类
package com.itheima._05bean;

import java.util.Properties;

/*

    1. 封装,
        将成员变量使用private修饰
        对外提供公共的访问方式
        this

    2. 构造方法

 */
public class Phone {

    // 属性
    private String brand;
    private double price;
    private String color;


    // 空参
    public Phone() {

    }

    // 有参
    public Phone(String brand, double price, String color) {
        this.brand = brand;
        this.price = price;
        this.color = color;
    }


    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }



    // 行为
    public void call() {
        System.out.println("打电话");
    }
}

  • 测试类
package com.itheima._02face_object.demo02;

/**
 * 测试类
 */
public class PersonTest {
    public static void main(String[] args) {
        // 写代码, 模拟各种场景,
        // 来测试功能类中的内容是否正确

        // 创建了一个Person对象, 对象名是p
        Person p = new Person();

        // 对象名.属性名
        p.name = "杨超越";
        p.age = 20;

        // 打印
        System.out.println("姓名是: " + p.name + ", 年龄是: " + p.age);

        p.eat();
        p.sleep(8);



    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值