当前位置: 首页 > 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;再把子问题分成更小的子问题……直到最后子问题可以…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...