面向对象的介绍和内存

这篇具有很好参考价值的文章主要介绍了面向对象的介绍和内存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习面向对象内容的三条主线

Java 类及类的成员:(重点)属性、方法、构造器;(熟悉)代码块、内部类
面向对象的特征:封装、继承、多态、(抽象)
其他关键字的使用:this、super、package、import、static、final、interface、
abstract 等

程序设计的思路

面向对象,是软件开发中的一类编程风格、开发范式。除了面向对象,还有面向
过程、指令式编程和函数式编程。在所有的编程范式中,我们接触最多的还是面
向过程和面向对象两种。

1. 面向对象编程概述(了解)

在学习面向对象之前,我们可以先了解一下面向过程。
面向过程是一种编程思想,它强调的是过程,意思是我们做任何事,都需要亲力亲为。
面向对象也是一种编程思想,相对于面向过程,我们的身份可以由原来问题的执行者变为指挥者,进而把生活中很多复杂的问题变得简单化。

面向过程强调的是过程,比如,把大象装冰箱,一共分3步:
第1步:打开冰箱门
第2步:把大象放进去
第3步:关上冰箱门

而面向对象强调的是结果,比如:
谁负责把大象装进去?
有没有发现,如果是面向对象的话,干这件事的主体并不是你自己,你变成了一个指挥者?

再比如,衣服脏了,我们可以让女盆友帮忙洗,不需要关注中间过程是怎么洗的,就可以拿到干净的衣服,当然,这首先需要有一个对象(加油哦)~

还有,当我们想吃一道菜,其实并不需考虑这道菜是怎么做的,怎么送达的,只需点菜即可.传菜和做菜都有具体的对象来完成具体的功能.我们不需要关注实现的过程,只需要关注结果就好。

面向对象的介绍和内存

这就是我们所说的面向对象的编程思想(OOP,Object Oriented Programming)

2 面向对象的三大特征

封装: 把相关的数据封装成一个“类”组件
继承: 是子类自动共享父类属性和方法,这是类之间的一种关系
多态: 增强软件的灵活性和重用性

类的概述

面向对象程序设计的重点是类的设计
类是一类事物抽取属性与功能形成的。

现实世界的生物体,大到鲸鱼,小到蚂蚁,都是由最基本的细胞构成的。同理,Java 代码
世界是由诸多个不同功能的类构成的。

面向对象的介绍和内存

Java 中用类 class 来描述事物也是如此。类,是一组相关属性和行为的集合,这也是类最
基本的两个成员。

属性:该类事物的状态信息。对应类中的成员变量

行为:该类事物要做什么操作,或者基于事物的状态能做什么。对应类中的成员方法

3.2 对象

每个对象具有三个特点:对象的属性,对象的功能和对象的标识。

对象的属性用来描述对象的基本特征。
对象的功能用来描述对象的可以完成的操作。
对象的标识是指每个对象在内存中都有一个唯一的地址值用于与其他对象进行区分,类似于我们的身份证号。

3.3 类和对象的关系

我们先创建类,再通过类创建出对象
我们可以通过一个类创建出多个对象
类是抽象的,对象是具体的

类就像设计图纸,而对象就是具体的事物

面向对象的介绍和内存

步骤 1:类的定义

类的定义使用关键字:class。格式如下:

[修饰符] class 类名{
   属性声明;
   方法声明;
 }

步骤 2:对象的创建

创建对象,使用关键字:new
创建对象语法:
方式一:
类名 对象名 = new 类名();
方式 2:
new 类名() //也称为匿名对象

3.4 练习:类的创建使用

手机的属性:颜色,尺寸,品牌,价格
手机的功能功能:打电话,发短信,听音乐

package cn.tedu.oop;
/**本类用作面向对象入门案例
 * 设计手机这一类事物:
 * 分析属性:品牌 价格 尺寸 颜色
 * 分析功能:打电话 发短信 看直播*/
/**在一个java文件中可以写多个class,但是,被public修饰的class只能有一个
 * 而且要求这个公共类的名字必须与文件的名字保持一致*/
public class TestCreateClass {
    public static void main(String[] args) {
        //help-findAction 或者 Alt+7
        //4.创建手机类的对象p1
        Phone p1 = new Phone();
        //5.通过手机类对象调用手机类的功能
        p1.call();
        p1.message();
        p1.video();
        //6.通过手机类对象打印查看属性值
        System.out.println(p1.color);//null
        System.out.println(p1.price);//0.0
        System.out.println(p1.size);//0.0
        System.out.println(p1.brand);//null
    }
}

//1.通过class关键字创建手机类--用来描述手机这一类事物--属性+功能
class Phone{
    //2.定义手机类的属性--用成员变量来描述--位置:类里方法外
    String brand;//品牌
    double price;//价格
    double size;//尺寸
    String color;//颜色
    //3.定义手机类的功能--用方法来描述--格式:修饰符 返回值类型 方法名(参数列表){方法体}
    public void call(){
        System.out.println("正在打电话~");
    }
    public void message(){
        System.out.println("正在发短信!");
    }
    public void video(){
        System.out.println("正在看直播~");
    }
}

3.5 对象在内存中的存储

Java把内存分成5大区域,我们重点关注栈和堆。

一般来讲局部变量存在栈中,方法执行完毕内存就被释放
对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
每个堆内存的元素都有地址值
对象中的属性都是成员变量,是有默认值的
TIPS: 栈与队列指的是一种数据的结构。
栈:先进后出(FILO – First In Last Out)
队列:先进先出(FIFO – First In First Out)

面向对象的介绍和内存
面向对象的介绍和内存

对象的创建过程分析:

Phone p = new Phone(); 这句代码,再内存中会发生什么呢?
1.在栈内存中开辟一块空间,存放引用类型Phone类型的变量p
2.在堆内存中开辟一块空间,存放Phone类型的对象
3.要给这个对象进行初始化,比如:String brand = null;
4.当对象准备好以后,会生成一个唯一的地址值,然后将此地址值交给引用类型的变量p来保存
5.如果以后想要操作此对象的各种资源,可以通过p变量保存的地址值找到该对象,比如:p.call(); p.price = 66.6;

面向对象的介绍和内存
3.6 练习2:创建多个对象

package cn.tedu.oop;
/**本类用作面向对象入门案例
 * 设计手机这一类事物:
 * 分析属性:品牌 价格 尺寸 颜色
 * 分析功能:打电话 发短信 看直播*/
/**在一个java文件中可以写多个class`,但是,被public修饰的class只能有一个
 * 而且要求这个公共类的名字必须与文件的名字保持一致*/
public class TestCreateClass {
    public static void main(String[] args) {
        //help-findAction 或者 Alt+7
        //4.创建手机类的对象p1
        Phone p1 = new Phone();
        //5.通过手机类对象调用手机类的功能
        p1.call();
        p1.message();
        p1.video();
        //6.通过手机类对象打印查看属性值
        System.out.println(p1.color);//null
        System.out.println(p1.price);//0.0
        System.out.println(p1.size);//0.0
        System.out.println(p1.brand);//null

        //7.创建手机类的第2个对象p2
        Phone p2 = new Phone();
        //8.通过p2对象,调用Phone类的3个方法
        p2.call();
        p2.message();
        p2.video();
        //9.给p2对象的4个属性赋值
        p2.brand = "HUAWEI";
        p2.color = "中国红";
        p2.price = 6666.66;
        p2.size = 5.6;
        //10.打印查看p2对象的4个属性值
        System.out.println(p2.brand);
        System.out.println(p2.price);
        System.out.println(p2.color);
        System.out.println(p2.size);

        //11.查看两个对象的地址值
        System.out.println(p1);//cn.tedu.oop.Phone@1b6d3586
		System.out.println(p2);//cn.tedu.oop.Phone@4554617c
    }
}

//1.通过class关键字创建手机类--用来描述手机这一类事物--属性+功能
class Phone{
    //2.定义手机类的属性--用成员变量来描述--位置:类里方法外
    String brand;//品牌
    double price;//价格
    double size;//尺寸
    String color;//颜色
    //3.定义手机类的功能--用方法来描述--格式:修饰符 返回值类型 方法名(参数列表){方法体}
    public void call(){
        System.out.println("正在打电话~");
    }
    public void message(){
        System.out.println("正在发短信!");
    }
    public void video(){
        System.out.println("正在看直播~");
    }
}

面向对象的介绍和内存文章来源地址https://www.toymoban.com/news/detail-481797.html

到了这里,关于面向对象的介绍和内存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过读取字节内容分析对象在内存中的布局

    在《如何计算一个实例占用多少内存?》中我们知道一个值类型或者引用类型的实例在内存中占多少字节。如果我们知道这段连续的字节序列的初始地址,我们就能够将代表该实例的字节内容读取出来。在接下来的内容中,我们将利用一个简单的方法输出指定实例的字节序列

    2024年02月08日
    浏览(35)
  • 设计模式学习笔记 - 面向对象 - 3.面向对象比面向过程有哪些优势?面向过程真的过时了吗?

    在过往的工作中,我发现很多人搞不清面向对象和面向过程的区别,总认为使用面向对象编程语言来开发,就是在面向面向对象编程了。而实际上,他们只是在用面向对象编程语言,编写面向过程风格的代码而已,并没有发挥面向对象编程的优势。这就相当于手握一把屠龙刀

    2024年02月22日
    浏览(46)
  • 学习笔记整理-面向对象-01-认识对象

    1. 对象 对象(object)是 键值对 的集合,表示属性和值的 映射关系 。 对象的语法 k和v之间用冒号分割,每组 k:v 之间用逗号分割,最后一个 k:v 对后可以不书写逗号。 属性是否加引号 如果对象的属性键名不符合命名规范,则这个键名必须用引号包裹。 属性的访问 可以用 点语

    2024年02月13日
    浏览(36)
  • 设计模式学习笔记 - 面向对象 - 1.面向对象到底讨论的是什么

    面向对象编程( OOP )的全称是 Object Oriented Programming 。 面向对象编程语言( OOPL )的全称是 Object Oriented Programming Language 。 面向对象编程中有两个非常重要的概念,就是类( Class )和对象( Object )。面向对象编程这个概念第一次使用是在 SmallTalk 这种编程语言中,它也被认

    2024年02月22日
    浏览(45)
  • 【Java面向对象】多态的详细介绍,简单易懂,看这一篇就够了

    A: 方法或对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承的基础之上的。简单来说,多态是具有表现多种形态的能力的特征。 消除类型之间的耦合关系 可替代性 可扩充性 接口性 灵活性 简化性 重载式多态在编译时已经确定好了。方法名相同而参数

    2024年01月20日
    浏览(66)
  • 面向对象 学习黑马视频(03)

    构造函数 析构函数(1) 构造函数 析构函数(2) 包含:构造函数顺序和析构函数顺序 成员变量 成员函数 C++对象模型 this指针 空指针访问成员函数 const 修饰成员函数 ;常对象 友元,让其他类可以访问本类中的私有变量 (1)全局函数做友元 (2)友元类 (3)成员函数 友元

    2024年02月10日
    浏览(32)
  • rust学习-面向对象

    面向对象编程(Object-Oriented Programming,OOP) main.rs lib.rs 如果一个语言必须有继承才能被称为面向对象语言的话,那么 Rust 就不是面向对象的。无法定义一个结构体继承父结构体的成员和方法 Rust 也提供了其他的解决方案 选择继承有两个主要的原因: (1)重用代码:一旦为一

    2024年02月16日
    浏览(39)
  • 【Python学习】—面向对象(九)

    类中不仅可以定义属性来记录数据,也可以定义函数,用来记录行为,类中定义的属性(变量)我们称之成员变量,类中定义的行为(函数),我们称之为成员方法。 表示对象本身的意思 只有通过self,成员方法才能访问类的成员变量 self出现在形参列表中,但是不占用参数

    2024年02月08日
    浏览(43)
  • C#核心学习(面向对象)

    基本概念: 在实例化对象时,会调用的用于初始化的函数,如果不写,则默认存在一个无参构造函数。 写法: 1、没有返回值 2、函数名和类名必须相同 3、没有特殊需求时,一般是 public 4、构造函数可以被重载 5、this代表当前调用该函数的对象自己 特殊写法 可以通过this 重

    2024年02月03日
    浏览(38)
  • Python面向对象学习整理(二)

    3.1 使用继承 示例代码如下 我们在上面的代码找那个分别编写了 pipi 类 和 dandan 类,它们分别继承于 Dog 类,因此他们都会具备 Dog 类具有的属性和方法,然后他们也可以拥有他们独有的属性和方法 3.2 方法的覆盖 3.2.1 一般的方法覆盖情况 假设有这种情况,子类和父类拥有同

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包