当前位置: 首页 > news >正文

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

目录

一、前言

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

        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交流。感谢阅读!

相关文章:

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

目录 一、前言 二、面向对象程序设计介绍 1.oop三大特性 : 2.面向对象和面向过程的区别 : 3.面向对象思想特点 : 4.面向对象的程序开发 : 三、Java——类与对象 1.java中如何描述一个事物? 2.什么是类? 3.类的五大成员: 4.封装的前提——抽象 : 5.什么是对…...

使用file-selector-button美化原生文件上传

前言 你平时见到的上传文件是下面这样的? 还是下面这种美化过的button样式 还是下面这种复杂的上传组件。 <input type="file" >:只要指定的是type类型的input,打开浏览器就是上面第一种原生的浏览器默认的很丑的样式。 下面的两种是我从ElementUI截的图,…...

0402换元积分法-不定积分

文章目录1 第一类换元法1.1 定理11.2 例题1.2 常见凑微分形式1.2.1常见基本的导数公式的逆运算1.2.2被积函数含有三角函数2 第二类换元法2.1 定理22.2 常见第二换元代换方法2.2.1 三角代换-弦代换2.2.2 三角代换-切代换2.2.3 三角代换-割代换2.2.4 三角代换汇总2.2.5 倒代换2.2…...

信号类型(雷达)——脉冲雷达(三)

系列文章目录 《信号类型&#xff08;雷达通信&#xff09;》 《信号类型&#xff08;雷达&#xff09;——雷达波形认识&#xff08;一&#xff09;》 《信号类型&#xff08;雷达&#xff09;——连续波雷达&#xff08;二&#xff09;》 文章目录 前言 一、相参雷达 1…...

并查集(13张图解)--擒贼先擒王

目录 前言 故事 &#x1f33c;思路 &#x1f33c;总结 &#x1f33c;代码 &#x1f44a;观察过程代码 &#x1f44a;正确代码 &#x1f44a;细节代码 来自《啊哈算法》 前言 刚学了树在优先队列中的应用--堆的实现 那么树还有哪些神奇的用法呢&#xff1f;我们从一…...

Flutter3引用原生播放器-IOS(Swift)篇

前言由于Flutter项目中需要使用到播放器功能&#xff0c;因此对flutter中各种播放器解决方案进行了一番研究和比对&#xff0c;最后决定还是自己通过Plugin的方法去引用原生播放器符合自己的需求&#xff0c;本篇文章会对各种解决方案做一个简单的比较&#xff0c;以及讲解一下…...

【蓝桥杯每日一题】双指针算法

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; 蓝桥杯 &#x1f319;我与杀戮之中绽放&#xff0c;亦如黎明的花…...

拼数(一般贪心)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题号&#xff1a;NC16783 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 设有n个正整…...

LeetCode 热题 C++ 169. 多数元素 10. 正则表达式匹配 155. 最小栈

力扣169 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1…...

Clickhouse学习:MergeTree

MergeTree一、MergeTree逻辑存储结构二、MergeTree物理存储结构三、总结一、MergeTree逻辑存储结构 如上图所示,在排序键(CountrID、Date)上做索引,数据会按照这两个字段先后排序ClickHouse是稀疏索引,每隔8192行做一个索引,如(a,1),(a,2),比如想查a,要读取[0,3)之间的内容,稀疏…...

【java基础】包装类,自动装箱和自动拆箱

文章目录基本介绍包装类自动装箱自动拆箱包装类注意事项包装类比较包装器内容不可变基本介绍 有时&#xff0c;需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。 例如&#xff0c;Integer类对应基本类型int。通常&#xff0c;这些类称为包装器&#…...

Android笔记(二十五):两种sdk热更插件资源加载方案

背景 在研究sdk插件化热更新方式的过程中总结出了两套插件资源加载方案&#xff0c;在此记录下 资源热更方式 方式一&#xff1a;合并所有插件资源 需要解决资源id冲突问题 资源ID值一共4个字段&#xff0c;由三部分组成&#xff1a;PackageIdTypeIdEntryId PackageId&…...

spring框架--全面详解(学习笔记)

目录 1.Spring是什么 2.Spring 框架特点 3.Spring体系结构 4.Spring开发环境搭建 5.spring中IOC和DI 6.Spring中bean的生命周期 7.Spring Bean作用域 8.spring注解开发 9.Spring框架中AOP&#xff08;Aspect Oriented Programming&#xff09; 10.AOP 实现分类 11.A…...

2023年CDGA考试模拟题库(401-500)

2023年CDGA考试模拟题库(401-500) 401.数据管理战略的SMART原则指的是哪项? [1分] A.具体 、高质量、可操作 、现实、有时间限制 B.具体、可衡量、可检验、现实、有时间限制 C.具体、可衡量、可操作、现实、有时间限制 D.具体、高质量、可检验、现实12-24个月的目标 答…...

软件设计师备考文档

cpu 计算机的基本硬件系统&#xff1a;运算器、控制器、存储器、输入设备、输出设备 cpu负责获取程序指令&#xff0c;对指令进行译码并加以执行 * cpu的功能控制器&#xff08;保证程序正常执行&#xff0c;处理异常事件&#xff09; 程序控制操作控制运算器&#xff08;只能…...

Javascript的API基本内容(一)

一、获取DOM对象 querySelector 满足条件的第一个元素 querySelectorAll 满足条件的元素集合 返回伪数组 document.getElementById 专门获取元素类型节点&#xff0c;根据标签的 id 属性查找 二、操作元素内容 通过修改 DOM 的文本内容&#xff0c;动态改变网页的内容。 inn…...

10、最小公倍数

法一&#xff1a; #include <stdio.h>int main(){int a,b;scanf("%d%d",&a,&b);int m a>b?a:b;//m表示a,b之间的较大值while(1){if(m%a0&&m%b0){break;}m;}printf("%d",m);return 0; }法二&#xff1a;a*i%b0成立 #include &…...

【vue】vue2.x项目中使用md文件

一、Vue项目展示md文件的三种方式 1、将md文件 导入为 html 生成的标题标签自带具有id属性&#xff0c;值为标题内容&#xff1b; <h2 id"测试">测试</h2> # 处理md为html字符串 yarn add markdown-loader # 处理字符串&#xff0c;用于导出显示 yarn a…...

操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权

系列文章 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述 注&#xff1a;阅读本编文章前&#xff0c;请先阅读系列文章&#xff0c;以免造成看不懂的情况&#xff01;&#xff01; MSF和CS绕过UAC提权 CS绕过UAC提权 拿到一个普通管理员的SHELL,在CS中没有*号代表有…...

快速排序+快速定位

快速排序算法采用了分治法以及递归作为解决问题的思想。在计算机科学中&#xff0c;分治法是一种很重要的算法。字面上的解释是“分而治之”&#xff0c;就是把一个复杂的问题分成两个或更多的相同或相似的子问题&#xff0c;再把子问题分成更小的子问题……直到最后子问题可以…...

nginx http rewrite module 详解

大家好&#xff0c;我是 17。 今天和大家聊聊 nginx http rewrite module 。 简单来说&#xff0c; ngx_http_rewrite_module module 用正则匹配请求&#xff0c;改写请求&#xff0c;然后做跳转。可以是内部跳转&#xff0c;也可以是外部跳转。 学习这个模块的时候&#xf…...

机器学习可解释性一(LIME)

随着深度学习的发展&#xff0c;越来越多的模型诞生&#xff0c;并且在训练集和测试集上的表现甚至于高于人类&#xff0c;但是深度学习一直被认为是一个黑盒模型&#xff0c;我们通俗的认为&#xff0c;经过训练后&#xff0c;机器学习到了数据中的特征&#xff0c;进而可以正…...

CV学习笔记-MobileNet

MobileNet 文章目录MobileNet1. MobileNet概述2. 深度可分离卷积&#xff08;depthwise separable convolution&#xff09;2.1 深度可分离卷积通俗理解2.2 深度可分离卷积对于参数的优化3. MobileNet网络结构4. 代码实现4.1 卷积块4.2 深度可分离卷积块4.3 MobileNet定义4.4 完…...

C++进阶——继承

C进阶——继承 1.继承的概念及定义 面向对象三大特性&#xff1a;封装、继承、多态。 概念&#xff1a; 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特 性的基础上进行扩展&#xff0c;增加功能&#xff0c;这…...

数据结构---单链表

专栏&#xff1a;数据结构 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;从零开始&#xff0c;数据结构&#xff01;&#xff01; 单链表前言顺序表的缺陷链表的概念以及结构链表接口实现打印链表中的元素SLTPrintphead->next!NULL和phead!NULL的区别开辟空间SLTNewNod…...

redis数据结构的底层实现

文章目录一.引言二.redis的特点三.Redis的数据结构a.字符串b.hashc.listd.sete.zset(有序集合)一.引言 redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、key-value的NoSQL数据库。 通常使用redis作为缓存中间件来降低数据库的压力&#xff0c;除此…...

【JavaSE】复习(进阶)

文章目录1.final关键字2.常量3.抽象类3.1概括3.2 抽象方法4. 接口4.1 接口在开发中的作用4.2类型和类型之间的关系4.3抽象类和接口的区别5.包机制和import5.1 包机制5.2 import6.访问控制权限7.Object7.1 toString()7.2 equals()7.3 String类重写了toString和equals8.内部类8.1…...

Java 主流日志工具库

日志系统 java.util.logging (JUL) JDK1.4 开始&#xff0c;通过 java.util.logging 提供日志功能。虽然是官方自带的log lib&#xff0c;JUL的使用确不广泛。 JUL从JDK1.4 才开始加入(2002年)&#xff0c;当时各种第三方log lib已经被广泛使用了JUL早期存在性能问题&#x…...

产品经理有必要考个 PMP吗?(含PMP资料)

现在基本上做产品的都有一个PMP证件&#xff0c;从结果导向来说&#xff0c;不对口不会有这么大范围的人来考&#xff0c;但是需要因地制宜&#xff0c;在公司内部里&#xff0c;标准程序并不流畅&#xff0c;产品和项目并不规范&#xff0c;关系错综复杂。 而产品经理的职能又…...

什么是原型、原型链?原型和原型链的作用

1、ES6之前&#xff0c;继承都用构造函数来实现&#xff1b;对象的继承,先申明一个对象&#xff0c;里面添加实例成员<!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title></head><body><script…...