java 一文讲透面向对象 (20万字博文)

news2024/11/26 22:19:09

目录

一、前言

二、面向对象程序设计介绍

        1.oop三大特性 : 

        2.面向对象和面向过程的区别 : 

        3.面向对象思想特点 : 

        4.面向对象的程序开发 : 

三、Java——类与对象

        1.java中如何描述一个事物?

        2.什么是类?

        3.类的五大成员:

        4.封装的前提——抽象 : 

        5.什么是对象 : 

        6.类和对象的关系 : 

        7.java中如何定义一个类 : 

        8.创建对象的格式 : 

        9.如何使用一个对象 : 

        10.关于匿名对象 : 

四、Java——成员变量和局部变量

        1.关于成员位置和局部位置 : 

        2.成员变量和局部变量的区别 : 

                ①定义位置 : 

                ②初始化 : 

                ③作用域 : 

                ④jvm内存 : 

                ⑤修饰符 : 

                ⑥生命周期 : 

五、oop三大特性——封装篇(两万余字)

六、oop三大特性——继承篇(四万余字)

七、oop三大特性——多态篇(十万余字)

八、面向对象总结


一、前言

        本篇博文是对Java 面向对象的一个全面总结。屏幕前的你一定或多或少地听说过面向对象三大特性——封装,继承,多态。诚然,能否掌握这三大特性,直接决定了能否正确理解和运用面向对象思想。但是,不止如此,面向对象思想是浩瀚的,是惊奇的,是美妙的。只有保持虚心,不断练习,我们才能越来越深刻地理解她的伟大。
        本篇博文将会从面向对象的介绍类与对象成员变量和局部变量面向对象三大特性四个大的方面同大家娓娓而谈。当然,重点肯定是oop三大特性了。对于面向对象介绍中的一些概念,大家了解即可,不需要背。这一章内容非常全面,尤其是oop三大特性部分,up投入最大,相信大家看完后一定收获不小,感谢阅读!


二、面向对象程序设计介绍

        1.oop三大特性 : 

        在说oop三大特征之前,大家先要知道——什么是oop?
        “oop”是面向对象程序设计(Object Oriented Programming)的简称。

        oop三大特性分别为——封装,继承,多态。其中,封装是实现继承的前提,继承是实现多态的前提。这三大特性之间一环扣一环,因此,如果想学好面向对象三大特性,就必须把每一个特性都扎实的掌握。

        2.面向对象和面向过程的区别 : 

        面向过程思想就是把关注点放在一件事或者一个活动中涉及到的步骤(也就是过程)上的思维方式。比如我们接触编程的入坑作——C语言。C是一门典型的面向过程的语言,当我们要用C来解决或者描述一件事情的时候,我们需要弄清楚事情的来龙去脉,列出实现目标需要的每个具体步骤,然后按部就班的一个接一个实现步骤。就是说,我们是作为执行者从事情发展的角度来进行编程的。

        面向对象思想就是把关注点放在一件事或者一个活动中涉及到的人或事物(也就是对象)上的思维方法。比如我们正在学习的java。java是一门典型的面向对象的语言,当我们要用java来描述或者解决一件事情的时候,我们不再需要关注完成这件事情所需的具体步骤,而是关注在这件事情中出现了几个对象,这些个对象分别参与了哪些行为。我们只需要将这些行为以编程的方式实现即可。就是说,我们是作为指挥者从人事管理的角度来进行编程的。

        面向过程程序设计性能更高,但是面向对象程序设计更易拓展和维护程序

        3.面向对象思想特点 : 

        与面向过程相比,面向对象更符合人们的思考习惯;面向对象可以把复杂的事情变得简单化;面向对象让人们从执行者变为了指挥者

        4.面向对象的程序开发 : 

        面向对象编程的设计开发,就是不断地找对象,使用对象,指挥对象做事情的一个过程。


三、Java——类与对象

        1.java中如何描述一个事物?

        在java中,我们通过创建“类”来描述事物,类主要由属性行为构成。比方说,我们可以创建一个Animal类来模拟世界上所有的动物。动物有哪些属性呢?物种名,栖息地,平均寿命等;动物有哪些行为呢?吃喝拉撒等。

        2.什么是类?

        类,即“归类,分类”。类是一系列具有相同属性和行为的事物的统称

        类用来模拟现实事物。比如,用来模拟手机的Phone类——

        属性 : 品牌,型号,价格,发售日期等等;

        行为 : 打电话,发短信,打游戏,看网课等等;

        3.类的五大成员:

        类的五大成员分别是属性方法构造器代码块内部类
        (除去内部类外,其他四大成员均在这篇博文中讲到;内部类考虑到使用频率和难度问题,up将其放在了“java 进阶”专栏。)

        4.封装的前提——抽象 : 

        抽象就是把一系列相关事物共同的属性和行为提取出来的过程。比如我们上面提到的Animal类和Phone类的例子。

        5.什么是对象 : 

        某一类事物的某个具体存在,即某一类事物的一个具体实例

        6.类和对象的关系 : 

        类 : 属性和行为的集合体,是一个抽象概念。(类用来模拟一类事物)

        对象 : 是某一类食物的具体体现,是一个具体存在

        eg1 : 

        狗——类。世界上的狗有千千万只,不知道指的是哪一只狗,因此单说“狗”指的是一个抽象概念。

        楼下阿姨养的那只宠物狗——对象。“楼下阿姨养的那只宠物狗”是千千万狗中的指定的一只狗,是具体的。

        eg2 : 

        手机——类

        任正非手中的华为手机——对象

        7.java中如何定义一个类 : 

        java中定义类的过程,就是把一系列相关事物共同的属性和行为抽取出来的过程。其实就是我们上文提到的“抽象”。

        

        PS : 类中的属性既可以是基本类型,也可以是引用类型。 

        8.创建对象的格式 : 

        类名 对象名 = new 类名();

        ①new是Java中用于创建对象的关键字。

        ②此处的“对象名”即一个指向堆空间中真正对象的引用变量。(即C中的指针,在Java中叫做引用)

        ③“类名()” 即真正的对象,在堆空间中

        ④创建某一个类的对象,也称为“实例化该类”,在实例化类之前,会先将要实例化的类的字节码文件加载到方法区(仅1次)。

        9.如何使用一个对象 : 

        对象名.变量名

        对象名.方法名(形参列表)

        演示 : 

package knowledge.oop.preface;
/** 定义了一个手机类 */
public class Phone {
    //手机的属性
    String brand = "Huawei";
    double price = 13499;

    //手机的行为
    public void call() {
        System.out.println("打电话📞~");
    }
}

class Test {
    public static void main(String[] args) {
        //创建Phone类对象
        Phone phone = new Phone();
        //调用Phone类属性
        System.out.println("Phone's brand = " + phone.brand);
        System.out.println("Phone's price = " + phone.price);
        //调用Phone类行为
        phone.call();
    }
}

        输出结果 : 

  

        10.关于匿名对象 : 

        匿名对象指没有用任何引用做接收的对象。

       

    //eg : 
    new Phone().call();

        ①由于new关键字的存在,匿名对象是确确实实在堆空间中存在的

        ②匿名对象仅能使用一次,因为没有引用指向它,使用后它的内存权限会被收回,不能再使用。


四、Java——成员变量和局部变量

        1.关于成员位置和局部位置 : 

        成员位置 : 

        类中,方法外。

        局部位置 : 

        方法的参数列表或者方法体语句。代码块中。

        如下

public class Demo {
    String name; //成员位置

    public void showName() {
        String name = "nb";    //局部位置
        System.out.println("name = " + name);
    }
}

        2.成员变量和局部变量的区别 : 

                ①定义位置 : 

                如上所示——成员变量定义在成员位置;局部变量定义在局部位置

                ②初始化 : 

                成员变量 : 默认的初始化值(我们在数组专题已经讲过),定义时可以不赋初值,可以正常调用。

                局部变量 : 默认的初始化值,定义时可以不赋初值,但必须先赋值再使用

                如果局部变量定义时未赋初值就使用,IDEA会报错,如下图所示

                ③作用域 : 

                成员变量 : 作用域为整个类

                局部变量 : 作用域为定义它的代码块或者方法体中

                PS : 成员变量和局部变量可以重名,但在同一作用域中,两个变量不能重名。即两个成员变量或者两个局部变量是不可以重名的,否则报错。

                        当出现成员变量和局部变量重名的情况时,我们称为“强龙不压地头蛇”布局定式,遵循就近原则

                ④jvm内存 : 

                成员变量 : 存在于堆内存中;

                局部变量 : 存在于栈内存中;

                ⑤修饰符 : 

                成员变量 : 可以加修饰符

                局部变量 : 不可以加修饰符;

                ⑥生命周期 : 

                成员变量 : 生命周期较长——随着对象的创建而存在,随着对象的消失而消失。

                局部变量 : 生命周期较短——随着方法的调用而存在,随着方法的调用完毕而消失。


五、oop三大特性——封装篇(两万余字)

                链接如下 : 

https://blog.csdn.net/TYRA9/article/details/128429036https://blog.csdn.net/TYRA9/article/details/128429036

                封装篇主要内容包括 : 

                ①封装的引入和介绍

                ②private关键字

                ③this关键字

                ④构造器详解

                ⑤标准代码JavaBean 


六、oop三大特性——继承篇(四万余字)

                链接如下 : 

https://blog.csdn.net/TYRA9/article/details/128523078https://blog.csdn.net/TYRA9/article/details/128523078

                继承篇主要内容包括 : 

                ①继承的引入和介绍

                ②继承关系中成员变量的使用

                ③继承关系中成员方法的使用

                ④继承关系中构造方法的使用

                ⑤继承的特点和本质

                ⑥方法重写和Java四大访问权限修饰符


七、oop三大特性——多态篇(十万余字)

                链接如下 : 

https://blog.csdn.net/TYRA9/article/details/128745582https://blog.csdn.net/TYRA9/article/details/128745582

                继承篇主要内容包括 : 

                ①多态的引入和介绍

                ②多态的具体使用

                ③多态的优缺点

                ④类型转换

                ⑤Java动态绑定机制

                ⑥多态的应用

                ⑦抽象类

                ⑧final关键字 和 static关键字

                ⑨接口

                ⑩Debug断点调试


八、面向对象总结

        再次回顾我们的面向对象。我们以抽象来引出了类的定义;而将抽象出来的东西封闭到一个类中,就是封装;让封装好的两个类之间产生父子关系,就是继承;在产生父子类关系的基础上,父类引用指向子类对象,就是多态。所以说,抽象是封装的前提,封装是继承的前提,继承是多态的前提。说是三大特性,其实一环扣一环,谁也离不开谁。

        🆗,以上就是面向对象专题的全部内容了。面向对象是java基础中相当有分量的一部分,大家一定要认真对待。整个专题的内容非常丰富,基本涵盖了面向对象所有的知识点,但是字数上略显冗余。如果大家有好的建议和想法,或者对文章的纠错,可以在评论区和up交流。感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/373147.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用python暴力破解zip压缩包的密码

如果你有压缩包的密码忘记了,并且压缩包的加密算法采用的是ZipCrypto,并且压缩参数如下图所示: 那么你就可以使用本文中的方法进行破解。 压缩包的加密,是根据输入的密码进行运算加密,输入不同的密码,加密…

OpenCV-Python系列(二)—— 图像处理(灰度图、二值化、边缘检测、高斯模糊、轮廓检测)

一、【灰度图、二值化】 import cv2 img cv2.imread("lz2.png") gray_img cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图 # 二值化,(127,255)为阈值 retval,bit_img cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY) cv2.imshow(photo1,im…

java:自定义变量加载到系统变量后替换shell模版并执行shell

这里的需求前提是,在项目中进行某些操作前,需要在命令后对shell配置文件的进行修改(如ip、port),这个对于用户是不友好的,需要改为用户页面输入ip、port,后台自动去操作修改配置;那么…

SAP 能不能撤销已冲销的凭证?能的话怎么操作?

本篇涉及SAP的SAP 财务凭证的冲销操作的。有需要可以查看:前面的文章有一篇是专门介绍如何介绍如何冲销SAP财务凭证的文章。SAP财务凭证常见的冲销步骤详细操作手册(FB08、AB08、VF11、FBRA等) 开始进入正题。假如有这么一种场景:…

【Acwing 周赛复盘】第92场周赛复盘(2023.2.25)

【Acwing 周赛复盘】第92场周赛复盘(2023.2.25) 周赛复盘 ✍️ 本周个人排名:1293/2408 AC情况:1/3 这是博主参加的第七次周赛,又一次体会到了世界的参差(这次周赛记错时间了,以为 19:15 开始&…

使用Jmeter进行性能测试的这套步骤,入职京东后,涨薪2次,升职一次

项目背景: 我们的平台为全国某行业监控平台,经过3轮功能测试、接口测试后,98%的问题已经关闭,决定对省平台向全国平台上传数据的接口进行性能测试。 01 测试步骤 1、编写性能测试方案 由于我是刚进入此项目组不久,…

怎么设置启用远程桌面?如何让外网电脑远程本地内网?

如何远程控制电脑?最简单实用的方案是开启电脑系统自带的远程桌面功能,如果涉及跨网、内外网互通,可以同时用快解析内网映射外网。下面是方案的具体实施步骤,供大家参考。 怎么打开设置启用远程桌面? 1.在目标需要远…

IO:阻塞和非阻塞、同步和异步

阻塞和非阻塞 阻塞的时候线程会被挂起 阻塞: 当数据还没准备好时,调用了阻塞的方法,则线程会被挂起,会让出CPU时间片,此时是无法处理过来的请求,需要等待其他线程来进行唤醒,该线程才能进行后续…

Javascript的API基本内容(二)

一、事件监听 结合 DOM 使用事件时,需要为 DOM 对象添加事件监听,等待事件发生(触发)时,便立即调用一个函数。 addEventListener 是 DOM 对象专门用来添加事件监听的方法,它的两个参数分别为【事件类型】和…

产业链金融的前世今生

产业链金融脱胎于供应链金融,又不同于供应链金融。二者的区别是, 供应链金融服务于单个环节、单个企业,而产业链金融是以产业链的核心 企业为依托,针对产业链的各个环节,设计个性化、标准化的金融服务产品,…

Appium自动化测试框架是一种较为优雅的使用方式

以操作小米商城下单为例流程是 启动小米商城app, 点击分类,点击小米手机, 点击小米10 至尊版,点击加入购物车,点击确定....原脚本Copyfrom time import sleep from appium import webdriver from selenium.common.exceptions impo…

python有哪些应用方向及其学习方法 资源推荐

目录 python 语言的应用方向 python简介 1.常规软件开发 2.科学计算 3.自动化运维 4.云计算 5.WEB开发 6.网络爬虫 7.大数据分析 8.人工智能 9.python处理图片和视频 【渗透测试相关工具下载】 推荐阅读 python实战文章 渗透测试文章 渗透测试实战专栏 python黑…

Gorm-学习笔记

1 基本使用 2 创建数据 2.1 如何使用Upsert 使用clause.OnConflict处理数据冲突 2.2 如何使用默认值 通过使用default标签为字段定义默认值 3 查询数据 3.1 First与Find 使用First时,需要注意查询不到数据会返回ErrRecordNotFound。 使用Find查询多条数据&#x…

详讲函数.2.

目录 5. 函数的嵌套调用和链式访问 5.1 嵌套调用 5.2 链式访问 小结: 6. 函数的声明和定义 6.1 函数的声明: 6.2 函数的定义: 5. 函数的嵌套调用和链式访问 函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的…

JUC包:CountDownLatch源码+实例讲解

1 缘起 有一次听到同事谈及AQS时,我有很多点懵, 只知道入队和出队,CLH(Craig,Landin and Hagersten)锁,并不了解AQS的应用, 同时结合之前遇到的多线程等待应用场景,发现…

QML 元素布局

定位器:是QtQuick模块中的提供的,有以下三种 Row 行定位器Column 列定位器Grid 网格定位器Flow 流动定位器常用属性: spacing间距 Row (行定位器) 按照行的方排列 //行定位器 Row{spacing: 5//设置间距Rectangle{width: 100he…

[蓝桥杯] 二分与前缀和习题练习

文章目录 一、二分查找习题练习 1、1 数的范围 1、1、1 题目描述 1、1、2 题解关键思路与解答 1、2 机器人跳跃问题 1、2、1 题目描述 1、2、2 题解关键思路与解答 1、3 四平方和 1、3、1 题目描述 1、3、2 题解关键思路与解答 二、前缀和习题练习 2、1 前缀和 2、1、1 题目描述…

《操作系统》——第二章 进程与线程

目录 2.1.1进程的概念、组成、特征 2.1.2进程的状态与转换、进程的组织 2.1.3进程控制 2.1.4进程通信 2.1.5线程的概念 2.1.6线程的实现方式和多线程模型 2.2.1调度的概念、层次 2.2.2进程调度的时机、切换与过程、方式 2.2.4调度算法的评价指标 2.2.5调度算法(1) 2…

1249 亲戚(并查集)

1249. 亲戚 题目 提交记录 讨论 题解 视频讲解或许你并不知道,你的某个朋友是你的亲戚。 他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。 如果能得到完整的家谱,判断两个人是否是亲戚应该是可行的,但如果两个人的最近公共祖…

数据库之高级查询

注意:第一个包含空,第二句不包含空注意:第二句是错的,聚合函数不能出现在where中。注意:相当于,按照分组属性,求出每个组的聚合函数值,所以肯定不能放单个属性有冲突with rollup是最…