day07 面向对象

目录

类和对象

1.1 类和对象的关系

1.2 标准类的定义

1.3 对象的创建和使用

1.4 对象内存图

1.4.1 单个对象内存图

1.4.2 两个对象内存图

1.4.3 两个对象指向相同内存图

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

1.6 private关键字的使用

1.7 this关键字的内存原理

1.8 封装概述

1.9 构造方法的格式和执行时机

1.9.1 构造方法的作用

1.9.2 构造方法的注意事项


类和对象

面向过程和面向对象思想的对比
    面向过程(c语言):关注点在过程,需要我们一步一步的实现功能
    面向对象(java):关注点在对象,我们只需要指挥对象(通过类创建)完成一些功能
    面向对象是基于面向过程的,我们是站在巨人的肩膀上编程的
    

1.1 类和对象的关系


    类:一类具有相同属性和行为的事物的描述 -> 理解为设计图
    对象:客观存在的事物 -> 根据设计图可以创建多个对象
   


1.2 标准类的定义


    1.成员变量: 必须使用private关键字私有
    2.构造方法: 提供空参和带参,用户选择哪一种都行 -> 快捷键生成
    3.成员方法: 必须提供成员变量对应的getXxx和setXxx方法 -> 快捷键生成

1.3 对象的创建和使用


    数据类型 对象名 = new 数据类型(); //空参构造
    数据类型 对象名 = new 数据类型(属性1,属性2...); //带参构造 
    
    使用对象,其实就是使用对象名(调用它的方法)

1.4 对象内存图

1.4.1 单个对象内存图


    1.栈内存 -> 方法进栈
    2.堆内存 -> new出来的东西进堆
    3.方法区 -> 字节码文件

在这里插入图片描述

1.4.2 两个对象内存图


在这里插入图片描述

总结:

多个对象在堆内存中,都有不同的内存划分,成员变量存储在各自的内存区域中,成员方法多个对象共用的一份

1.4.3 两个对象指向相同内存图

成员变量在这里插入图片描述

总结 :

当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的)

只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。

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


    1.类中位置:成员变量在类中方法外;局部变量在方法上
    2.内存中位置:成员变量在堆内存(跟着对象走);局部变量在栈内存(跟着方法走)
    3.生命周期:成员变量就是对象的生命周期;局部变量就是方法的生命周期
    4.初始化值:成员变量进堆,所以有默认的初始化值;局部变量没有,需要先定义赋值,才能使用
    


1.6 private关键字的使用


    private关键字是权限修饰符(java中有四种权限)
    private关键字可以修饰成员(成员变量和成员方法)
    被private修饰的成员,只能在本类中访问(出了本类就访问不到了! -> 有问题! -> 提供对应公共的访问方式)

 

1.7 this关键字的内存原理


    this关键字代表当前类,对象的引用(地址)
    this可以调用本类的成员
    我们使用this区分局部变量和成员变量重名问题

1.8 封装概述


    java中面向对象的三大特征:封装,继承,多态
    封装:隐藏实现细节,对外提供对应公共的访问方式
        体现1:私有成员,提供对应的get和set方法(安全性)
        体现2:方法的定义,将代码封装在方法中(复用性)
        体现3:将数据封装在类中    

1.9 构造方法的格式和执行时机


    空参:public/private 类名和方法名一致(){}
    带参:public/private 类名和方法名一致(属性1,属性2..){
        this.属性1 = 属性1;
        this.属性2 = 属性2;
        ...
    }

1.9.1 构造方法的作用


    本质的作用是创建对象
    其他作用,借助了构造方法加载的时机,完成对象的赋值(带参构造)

1.9.2 构造方法的注意事项


    1.如果我们不提供构造,系统会提供一个默认的空参
    2.如果我们提供了带参,系统就不会给我们空参了
    3.总结:两种都提供

public class User {
    // 成员变量
    private String name;
    private int age;

    // 构造方法
    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 成员方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值