跟康师傅学Java-面向对象(基础)

news2025/4/19 15:15:38

跟康师傅学Java-面向对象(基础)

学习面向对象内容的三条主线(非官方)

①Java类及类的成员:(重点)属性、方法、构造器;(熟悉)代码块、内部类

②面向对象的特征:封装、继承、多态、(抽象)

③其他关键字的使用:this、super、package、import、static、final、interface、abstract等

1. 面向对象编程概述

1.1 程序设计的思路

面向对象是软件开发中的一类编程风格、开发范式。除了面向对象,还有面向过程、指令式编程和函数式编程。

1.面向过程(pop)

关注过程,过程就是数据的步骤。如果某个过程的实现代码重复出现就可以把这个过程抽象为一个函数。

代码结构:以函数为组织单位。

是一种执行者思维,适合解决简单问题。扩展能力差、后期维护难度较大。

2.面向对象(oop)

关注:在程序设计过程中,参照现实中事物,将事物的属性特征,行为特征抽象出来,用类来表示。

代码结构:以为组织单位。每种事物都具备自己的属性行为/功能

是一种设计者思维,适合解决复杂问题。代码可扩展性强、可维护性高。

面向对象可以帮助我们从宏观上把握,从整体上分析整个系统,但是具体到部分的微观操作(就是一个个方法),仍然需要面向过程的思路去处理。

随着需求和功能的增多,把这些步骤和功能进行封装,封装时根据不同的功能进行不同的封装,功能类似的封装在一起。

2. 类和对象

2.1 类和对象概述

类:具有相同特征的事物的抽象描述,是抽象的、概念上的定义。                --> 抽象的

对象:实际存在的该类事物的每个个体,是具体的,因而也称为实例(instance)。 --> 具体的

2.2 类的成员概述

面向对象程序设计的重点是类的设计,然而类的设计其实是类的成员设计

类是一组相关属性行为的集合,这也是类最基本的两个成员。

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

成员变量 <=> 属性 <=> Field

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

(成员)方法 <=> 函数 <=> Method

2.3 面向对象完成功能的三步骤(*重要)

步骤1:类的定义,格式如下

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

步骤2:对象的创建 new

image-20250206091623764

语法:

// 方式1:给创建的对象命名
// 把创建的对象用一个引用数据类型的变量保存起来,这样就可以反复使用这个对象

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

// 方式2:

new 类名()   // 也称为匿名对象

步骤3:对象调用属性或方法

对象是类的一个实例,必然具备该类事物的属性和行为(即方法)

使用"对象名.属性""对象名.方法"的方式访问对象成员(包括属性和方法)

2.4 匿名对象(anonymous object)

不使用对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。如 : new Person().shout();

使用情况:

​ 如果一个对象只需进行一次方法调用,那么就可以使用匿名对象。

​ 经常将匿名对象作为一个实参传递给一个方法调用。

3. 对象的内存解析

3.1 JVM内存结构划分

HotSpot Java虚拟机的架构图如下。其中我们主要关心的是运行时的数据区部分(Runtime Data Area)

image-20250206093507012

堆(Heap) :此内存区域存在的唯一目的就是存放对象实例所有的对象实例以及数组都要在堆上分配。

栈(Stack)是指虚拟机栈,用于存储局部变量等。局部变量表存放了编译器可知长度的各种基本数据类型,对象引用(reference类型,它不等同于对象本身,是对象在堆内存中的首地址),方法执行完,自动释放。

方法区(Method Area):用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

面试题:对象名中存储的是什么?

答:对象的地址。

直接打印对象名和数组名都是显示"类型@对象的hashcode值",所以说类、数组都是引用数据类型,引用数据类型的变量存储的是对象的地址或者说是指向堆中对象的首地址

3.2 对象内存解析

class Person {
    //类:人 
    String name; 
    int age; 
    boolean isMale; 
} 
public class PersonTest {
    //测试类 
    public static void main(String[] args) {
    
        Person p1 = new Person(); 
        p1.name = "赵同学"; 
        p1.age = 20; 
        p1.isMale = true; 
        Person p2 = new Person(); 
        p2.age = 10;
        Person p3 = p1

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

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

相关文章

2000-2017年各省国有经济煤气生产和供应业固定资产投资数据

2000-2017年各省国有经济煤气生产和供应业固定资产投资数据 1、时间&#xff1a;2000-2017年 2、来源&#xff1a;国家统计局、能源年鉴 3、指标&#xff1a;行政区划代码、城市、年份、国有经济煤气生产和供应业固定资产投资 4、范围&#xff1a;31省 5、指标说明&#x…

线性代数 | 知识点整理 Ref 3

注&#xff1a;本文为 “线性代数 | 知识点整理” 相关文章合辑。 因 csdn 篇幅合并超限分篇连载&#xff0c;本篇为 Ref 3。 略作重排&#xff0c;未整理去重。 图片清晰度限于引文原状。 如有内容异常&#xff0c;请看原文。 《线性代数》总复习要点、公式、重要结论与重点释…

网络层IP协议知识大梳理

全是通俗易懂的讲解&#xff0c;如果你本节之前的知识都掌握清楚&#xff0c;那就速速来看我的IP协议笔记吧~ 自己写自己的八股&#xff01;让未来的自己看懂&#xff01; &#xff08;全文手敲&#xff0c;受益良多&#xff09; 网路基础3 网路层 TCP并没有把数据发到网路…

【Web前端技术】第二节—HTML标签(上)

hello&#xff01;好久不见—— 做出一个属于自己的网站&#xff01; 云边有个稻草人-个人主页 Web前端技术—本篇文章所属专栏 目录 一、HTML 语法规范 1.1 基本语法概述 1.2 标签关系 二、HTML 基本结构标签 2.1 第一个 HTML 网页 2.2 基本结构标签总结 三、网页开发…

08软件测试需求分析案例-删除用户

删除用户是后台管理菜单的一个功能模块&#xff0c;只有admin才有删除用户的权限。不可删除admin。 1.1 通读文档 通读需求规格说明书是提取信息&#xff0c;提出问题&#xff0c;输出具有逻辑、规则、流程的业务步骤。 信息&#xff1a;此功能应为用户提供确认删除的功能。…

十三种通信接口芯片——《器件手册--通信接口芯片》

目录 通信接口芯片 简述 基本功能 常见类型 应用场景 详尽阐述 1 RS485/RS422芯片 1. RS485和RS422标准 2. 芯片功能 3. 典型芯片及特点 4. 应用场景 5. 设计注意事项 6. 选型建议 2 RS232芯片 1. RS232标准 2. 芯片功能 3. 典型芯片及特点 4. 应用场景 5. 设计注意事项 6…

反转一个字符串

用数组栈实现 void Reverse(char *C, int len) {top -1;for(int i 0; i < len; i){push(C[i]);}for(int i 0; i < len; i){C[i] Top();pop();} } 全部函数 #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAX_SIZE 101int …

【限流算法】计数器、漏桶、令牌桶算法

1 计数器 使用计数器实现限流&#xff0c;可限制在指定时间间隔内请求数小于阈值的情况&#xff0c;但存在临界问题。如图1-17所示&#xff0c;假设每分钟系统限流500个请求&#xff0c;在XX:00:59时刻系统接收到500个请求&#xff0c;在XX:01:00时刻系统又接收到500个请求&am…

秘密任务 2.0:如何利用 WebSockets + DTOs 设计实时操作

在之前的文章中&#xff0c;我们探讨了为什么 DTO 是提升 API 效率和安全性的秘密武器。现在&#xff0c;我们进入了一个全新的场景——我们将深入探讨如何通过 WebSockets DTOs 实现实时操作&#xff01; Agent X 正在进行一项高风险的卧底任务。突然&#xff0c;总部更新了…

SpringAI+DeepSeek大模型应用开发——3 SpringAI简介

SpringAI整合了全球&#xff08;主要是国外&#xff09;的大多数大模型&#xff0c;而且对于大模型开发的三种技术架构都有比较好的封装和支持&#xff0c;开发起来非常方便&#xff1b; 不同的模型能够接收的输入类型、输出类型不一定相同。SpringAI根据模型的输入和输出类型…

MySQL GTID集合运算函数总结

MySQL GTID 有一些运算函数可以帮助我们在运维工作中提高运维效率。 1 GTID内置函数 MySQL 包含GTID_SUBSET、GTID_SUBTRACT、WAIT_FOR_EXECUTED_GTID_SET、WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS 4个内置函数&#xff0c;用于GTID集合的基本运算。 1.1 GTID_SUBSET(set1,set2) …

从“链主”到“全链”:供应链数字化转型的底层逻辑

1. 制造业与供应链数字化转型的必然性 1.1. 核心概念与战略重要性 制造业的数字化转型&#xff0c;是利用新一代数字技术&#xff08;如工业互联网、人工智能、大数据、云计算、边缘计算等&#xff09;对制造业的整体价值链进行根本性重塑的过程。这不仅涉及技术的应用&#…

定制化突围:遨游防爆手机的差异化竞争策略

在石油、化工、矿山等危险作业场景中&#xff0c;随着工业智能化与安全生产需求的升级&#xff0c;行业竞争逐渐从单一产品性能的比拼转向场景化解决方案的深度较量。遨游通讯以九重防爆标准为技术底座&#xff0c;融合多模稳控系统与全景前瞻架构&#xff0c;开辟出"千行…

士兵乱斗(贪心)

问题 B: 士兵乱斗 - USCOJ

【C++面向对象】封装(下):探索C++运算符重载设计精髓

&#x1f525;个人主页 &#x1f525; &#x1f608;所属专栏&#x1f608; 每文一诗 &#x1f4aa;&#x1f3fc; 年年岁岁花相似&#xff0c;岁岁年年人不同 —— 唐/刘希夷《代悲白头翁》 译文&#xff1a;年年岁岁繁花依旧&#xff0c;岁岁年年看花之人却不相同 目录 C运…

JVM初探——走进类加载机制|三大特性 | 打破双亲委派SPI机制详解

目录 JVM是什么&#xff1f; 类加载机制 Class装载到JVM的过程 装载&#xff08;load&#xff09;——查找和导入class文件 链接&#xff08;link&#xff09;——验证、准备、解析 验证&#xff08;verify&#xff09;——保证加载类的正确性 准备&#xff08;Prepare&…

UML-饮料自助销售系统(无法找零)序列图

一、题目&#xff1a; 在饮料自动销售系统中&#xff0c;顾客选择想要的饮料。系统提示需要投入的金额&#xff0c;顾客从机器的前端钱币口投入钱币&#xff0c;钱币到达钱币记录仪&#xff0c;记录仪更新自己的选择。正常时记录仪通知分配器分发饮料到机器前端&#xff0c;但可…

爬虫利器SpiderTools谷歌插件教程v1.0.0!!!web端JavaScript环境检测!!!

SpiderTools谷歌插件教程v1.0.0 一、SpiderTools简介二、下载通道三、插件介绍四、插件使用五、工具函数使用 一、SpiderTools简介 SpiderTools主要用于检测和监控网页的JavaScript运行环境。该插件可以帮助开发者更好地查看网页运行环境&#xff0c;特别是在处理复杂的前端环…

计算机视觉算法实战——基于YOLOv8的农田智能虫情测报灯害虫种类识别系统开发指南

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 一、智能虫情监测领域概述 1.1 农业虫害防治现状 全球每年因虫害造成的粮食损失达20%-40%&#xff0c;我…

14-算法打卡-哈希表-基本概念-第十四天

1 基本概念 1.1 哈希表 百度百科解释&#xff1a; 散列表&#xff08;Hash table&#xff0c;也叫哈希表&#xff09;&#xff0c;是根据关键码值(Key value)而直接进行访问的数据结构。也就是说&#xff0c;它通过把关键码值映射到表中一个位置来访问记录&#xff0c;以加快…