Day07-1.面向对象

面向对象

  1. 面向对象:是Java语言编程使用的一种编程思路,编程套路
  2. 面向过程和面向对象区别:
    面向过程:注重解决问题的步骤,过程;比如:想要解决一个问题,要考虑这个问题解 决的每一步怎么去完成。
    面向对象:注重解决问题的主体;比如:想要解决一个问题,只需要考虑找一个主体帮 我们去完成。
  3. 举例:
    洗衣服:
    面向过程解决:找个盆 放衣服 放水 放洗衣液 泡一泡 洗一洗 晾一晾
    面向对象解决:找一个全自动洗衣机
  4. 面向过程和面向对象的关系:
    面向过程是面向对象的基础,面向对象基于面向过程
  5. 面向对象的特征:
    封装,继承,多态

类和对象

  1. 类:类型
    对一些相同的相似的事物,一种统称。是一个概念
  2. 对象:
    是类型的一个具体的体现,是一个实例

类的定义

  1. 概述:想要去描述一个类型,就两点
    属性:对类型的信息的描述
    在Java语言中,一般是通过变量来定义属性
    在类中方法外定义
    行为:对类型的功能的描述
    在Java语言中,一般是通过方法来定义行为
    方法的修饰符:public
  2. 定义一个人类:
class  人类{
   属性:
       姓名、年龄、爱好
   行为:
       吃饭、睡觉、打豆豆
}
  1. 只要是一个类型,想要使用这个类型,都会先编译为一个.class文件
    如果一个类型中定义了主方法:这个类型一般称为测试类
    如果一个类中没有定义主方法:一般称之为自定义类

对象的定义和使用

  1. 创建的格式:
    类型 对象名 = new 类型();
  2. 说明:
    类型:要创建哪一个类型的实例,类型就写对应的类名
    对象名:给对象起一个名字,用来保存对象的地址值
    =:赋值符号
    new:在堆内存中开辟空间
    类型:跟前面的保持一致
    ():构造方法
  3. 使用对象属性的方式:
    属性赋值操作:
    对象名.属性名 = 值;
    访问属性值:
    对象名.属性名
    注意:如果对象的属性没有赋值,就访问,不会报错
    因为对象的属性会有一个默认值
    默认值:整数:0 小数:0.0 String:null 字符:’ ’ 布尔:false
  4. 访问对象的方法
    对象名.方法名();

代码

package demo01;

public class Person {
    //属性:姓名 年龄  爱好
    String name;
    int age;
    String hobby;
    double height;
    //行为:吃饭  睡觉
    public void eat(){
        System.out.println("人类会吃饭");
    }
    public void sleep(){
        System.out.println("人类会睡觉");
    }
}

package demo01;

public class Demo01 {
    public static void main(String[] args) {
        //创建Person类的一个对象
        Person per = new Person();
        //给对象的属性赋值
        per.name = "张三";
        per.age = 23;
        per.hobby = "抽烟";
        //访问对象的属性值
        System.out.println(per.name);
        System.out.println(per.age);
        System.out.println(per.hobby);
        System.out.println(per.height);
        //调用对象所有的功能
        per.eat();
        per.sleep();
    }
}

一个对象的内存图

在这里插入图片描述

  1. 先加载测试类Demo01
  2. 有JVM默认执行主方法,主方法main进栈
  3. 加载Person类型
  4. 在main方法中创建一个Person类的变量,用来存储对象的地址
  5. 在堆内存中创建一个对象,并为该对象的属性初始化
  6. 将对象的地址值赋值给main方法中的变量保存
  7. 使用main方法中的变量,访问对象,并且给对象中的属性赋值
  8. 使用main方法中的变量,获取对象中的属性值
  9. 使用main方法中的变量,调用对象的方法执行

两个对象的内存图

在这里插入图片描述
总结:
(1)多个对象都属于同一个类型,都有相同的属性
但是在不同的对象中,保存的属性值都可能不一样
(2)如果要使用某一个类型,需要先加载该类。如果加载之后,后续继续使用这个类 型,不需要重复加载,加载一次即可。

两个引用指向同一个对象

  1. 如果两个变量中,保存的是同一个对象的地址值
  2. 其中一个变量,将对象中的属性进行修改,另外一个变量访问对象中的属性值,访问的 是修改之后的结果。

成员变量和局部变量

  1. 局部变量:在方法中定义的变量
  2. 成员变量:在类中方法外定义的变量
  3. 区别:
    (1)定义的位置不同
    (2)存储的空间不同:
    局部变量:在栈内存中存储
    成员变量:在堆内存中存储
    (3)生命周期不同:
    局部变量:随着方法的调用而存在,随着方法的调用结束而消失
    成员变量:随着对象的创建而存在,随着对象的空间回收而消失
    (4)默认值不同:
    局部变量:没有默认值,不赋值不能使用
    成员变量:有默认值

匿名对象

  1. 概念:在创建一个对象之后,不使用变量接收对象的地址值
  2. 格式:
    new 类名();
  3. 使用场景:
    (1)当只需要调用某一个对象的方法一次
    不需要在方法中创建一个空间存储对象的地址,节约内存空间
    (2)当传递一个对象的时候,可以使用匿名对象来当做实参传递
    不需要多创建一个变量来存储地址,节约内存空间
    (3)当某个方法需要返回一个对象,可以返回一个匿名对象
    不需要多创建一个变量来存储地址,节约内存空间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值