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

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

跟康师傅学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

相关文章:

  • 秒杀系统解决两个核心问题的思路方法总结:1.库存超卖问题;2.用户重复抢购问题。
  • linux 内核 container_of 宏的原理
  • 批量上传OpenStack镜像
  • python中参数前**的含义
  • 数据结构-前缀树
  • 【Vue 2中的emits声明与Vue 3的defineModel宏函数详解】
  • 蓝牙网关的功能与应用场景
  • Doris的向量化执行如何支撑分布式架构和复杂查询
  • 深度剖析:生成式人工智能备案和登记的关键差异
  • 【HFP】深入解析蓝牙 HFP 协议中呼叫转移、呼叫建立及保持呼叫状态的机制
  • 【强内核论】(6) 核心竞争力:价格不是决定成交的主要因素 | 决定对方买单的是人设 | 老陈头 | 数字游牧社
  • 采用若依vue 快速开发系统功能模块
  • 安全测试的全面知识体系及实现路径
  • visual studio 2022更改项目名称,灾难性故障(异常来自HRESULT)
  • [dp16_两个数组] 通配符匹配 | 交错字符串 | 两个字符串的最小ASCII删除和
  • Linux中NFS服务设置
  • 3.学习笔记--Spring-AOP总结(p39)-Spring事务简介(P40)-Spring事务角色(P41)-Spring事务属性(P42)
  • vue MarkdownIt标签多出了<p>标签导致高度变丑
  • 【实战篇】导入dbc文件
  • 路由过滤实验
  • 特朗普执政百日集会吹嘘政绩,美国消费者信心指数跌至疫情以来最低
  • 游客曝九寨沟打网约车被出租车围堵,景区回应:当地无合规网约车
  • 辽宁辽阳市白塔区一饭店发生火灾,事故已造成22人遇难3人受伤
  • 江苏银行一季度净赚近98亿增逾8%,不良贷款率微降
  • 现场|西岸美术馆与蓬皮杜启动新五年合作,新展今开幕
  • 中方会否公布铁线礁的领海基线?外交部:中方执法活动旨在反制菲方侵权挑衅