Java语言程序设计——篇四(1)

类和对象

  • 面向对象概述
      • 面向过程与面向对象
      • 面向对象基本概念
      • 面向对象的基本特征
      • 面向对象的优势及应用
    • 为对象定义类
      • 类的修饰符
      • 成员变量
        • 成员变量-修饰符
      • 构造方法⭐️
      • 成员方法
        • 成员方法-修饰符
        • 例题讲解
      • ⚠️理解栈和堆

面向对象概述

两种程序设计方法

  • 结构化程序设计,典型代表C。
  • 面向对象程序设计( Object Oriented Programming,OOP ),典型代表Java, C++, Python。

面向过程与面向对象

  • ⭐️面向过程:专注于如何去解决一个问题的过程,编程特点是用一个个函数去实现过程操作,没有类与对象的概念。
  • ⭐️面向对象:专注于有哪一个对象实体去解决这个问题,编程特点是:出现了一个个的类,由类去生成对象。
  • ⭐️对象(Object)
    现实世界中,一个人、一辆汽车、一台电视机、一所学校,一次会议、一场足球比赛、一个账户等。
  • 对象的两方面的特征:
  • ⭐️静态特征: 描述对象的状态。
  • ⭐️动态特征: 描述对象的行为。
  • ⭐️对象的定义:是其自身所具有的状态特征及可以对这些状态施加的操作组合在一起所构成的实体。

面向对象基本概念

  • ⭐️类(class)
      例如人类、鱼类、交通工具类等。
  • ⭐️类定义:具有相似特征和行为的对象的集合。
    所有的事物都可以归到某类中。
       例如,汽车属于交通工具类,手机属于通信工具类。
  • ⭐️实例(instance)或对象
    某个类的一个具体的对象称为该类的一个实例。
      例如,我的汽车是汽车类的实例。

    面向对象的基本特征

  • ⭐️封装性
    对象是状态(属性)和行为(操作或方法)封装体。
      例如,一辆汽车就是一个封装体。
      实现信息隐藏,通过接口与外界通信。
    在这里插入图片描述
  • ⭐️继承性
    继承是将一个 已有类中的属性和方法保留,加上自己特有的属性和方法,形成一个新类,这种技术叫做继承,子类继承父类。
  • ⭐️多态性
    多态指一个程序中同名的不同方法共存的情况。Java通过方法的重载方法覆盖来实现多态。
    通过方法的重载,一个类中可以有多个具有相同名字的方法,但这些方法具有不同的参数个数或不同的参数类型。
    通过方法覆盖,子类可以重新实现父类的某些方法,使其具有自己的特征。

面向对象的优势及应用

1、易维护(maintainability)
  在OOP中,类就是一个模块,并且可以继承。
2、可重用(resusability)
  之前写好的代码可以被代码的创建者或其他人重用。
  可使用语言本身提供类库或API(应用编程接口)。
3、可扩展(extensibility)
  通过继承来实现功能扩展。

为对象定义类

[修饰符] class 类名 [extends 父类名] [implements 接口名] 
{1. 修饰符 类型  成员变量;2. 构造方法3. 修饰符 类型  成员方法(参数列表){类型  局部变量;方法体;……}
} 

    类的修饰符:[public][abstract | final]

类的修饰符

    类修饰符:public、abstract、final、缺省。
1️⃣public:说明这是一个公共类,可以被其它任何类引用和调用。
2️⃣缺省: 不写访问控制符,表示类只能被本包的其它类访问。
说明:同一个源程序文件中不能出现两个或者两个以上的公共类, 否则编译时系统会提示应将第二个公共类放在另一个文件中。
3️⃣抽象类abstract
以abstract作为关键字,如果有的话,应该放在访问控制符后面,表示这个类是个抽象类。抽象类不能直接产生实例化一个对象,它只能被继承。
例如:食品,可以理解为能够吃的东西,但谁也不会说明食品是什么样子,平时可能指的是饼干、水果等具体对象。对于食品这个概念,必须进行进一步分类,才能实例化,如苹果、西瓜等。
4️⃣最终类final
以final作为关键字,如果有的话,应该放在访问控制符后面,表示这个类是个最终类,也就是说最终类不能被继承,不能再派生出其它子类。
例如:String类
abstract和final不能同时修饰一个类,既是抽象类又是最终类的类没有意义。

成员变量

类的成员变量描述了该类的内部信息。
        [修饰符] 变量类型 变量名 [=初值];
在定义类的成员变量时,可以同时赋初值,但对成员变量的操作只能放在方法中。
修饰符包括访问控制修饰符、静态修饰符static、最终说明符final。
成员变量的修饰符:[public | protected | private ] [static] [final]

成员变量-修饰符

1️⃣访问控制修饰符
访问控制修饰符包括4种类型:
private: 私有,此成员只能在类的内部使用。
默认(default/friendly) 也可以不写访问控制符,成员可被本包的其它类访问(包内友好)。
protected: 被保护,成员可被本包的所有类访问,也可以被子类访问(家庭成员)。
public: 公共,成员可被所有类访问 。
在这里插入图片描述
2️⃣静态修饰符static
用static声明的成员变量被视为类的成员变量,静态变量也称为类变量。没有static修饰的变量称为非静态变量,也称为实例变量。
3️⃣最终说明符final
用final声明的变量就是最终变量,即标识符常量,其值不可以改变。
如:final float PI=3.14 (一旦赋初值就不能改变)

构造方法⭐️

构造方法(constructor)是一种特殊的方法,它是在对象被创建时初始化对象的成员的方法。
构造方法的主要作用是对类对象的初始化工作。
构造方法的方法名与类名相同。
构造方法不能写返回值,也不能有void。
构造方法的返回值就是该类本身。

成员方法

类的方法是用来定义对类的成员变量进行操作的。
实现类内部功能的机制。
Java的方法必须定义在类的内部。

  [修饰符] 返回值的数据类型 方法名(参数列表){语句序列;return [表达式]}

方法的修饰符:[public | protected | private ] [static] [final | abstract]

成员方法-修饰符

1️⃣访问控制修饰符 (与成员变量相同)
在这里插入图片描述
2️⃣静态修饰符static
用static修饰的方法称为静态方法,也称为类方法。
没有static修饰的方法称为非静态方法,也称为实例方法。
3️⃣final 方法
用final声明的方法称为最终方法。它不能被子类覆盖, 即不能在子类中修改或者重新定义,但可以被子类继承,用于保护一些重要的方法不被修改。
4️⃣abstract方法
用abstract修饰的方法称为抽象方法。这种方法只有方法的声明,却没有方法体,它不能实现。只能被重写时,加上方法体后,才能产生对象。
抽象方法只能出现在抽象类中,含有抽象方法的类称为抽象类,抽象类中还可以含有其他非抽象方法。

例题讲解

定义一个名为Employee的类

public class Employee {public String name;public int age;public double salary; public Employee(){}    // 无参数构造方法public void sayHello() {System.out.println("My name is " + name);}public double computeSalary(int hours, double rate) {salary = salary + hours * rate; return salary;}
}

用类创建对象(实例)

使用构造方法创建对象
Employee employee; //声明对象
employee = new Employee(); //创建对象 
employee.name = "李明";
employee.age = 28;
employee.salary = 5000.00;

⚠️理解栈和堆

JVM将内存空间在逻辑上分为栈(stack)与堆(heap)两种结构。
被调用方法参数和方法中的局部变量都存储在内存中,当程序使用new运算符创建对象时,JVM将在中分配内存。

假设在main()方法中创建Employee类一个对象

public static void main(String[] args){ //args是方法参数//employee这个对象是方法的局部变量Employee employee = new Employee();employee.name = "李明";employee.age = 20;employee.salary = 5000.00;
}

在这里插入图片描述
博主用心写,读者点关注,互动传真情,知识不迷路

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

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

相关文章

Linux RTL8111/RTL8168 不能联网 / 最新版驱动下载安装

注: 机翻,未校对。 如何让 Realtek RTL8111/RTL8168 在 Linux 下工作 这篇文章于 2016 年 8 月在我原来的博客上发布。尽管如今 Linux 下的 RTL8111/RTL8168 网络接口的情况变得越来越稳定,但它们仍然会导致数据包丢失或网络连接不稳定等问题…

Python统计实战:时间序列分析之Winters指数平滑法预测

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。 (以下练习题来源于《统计学—基于Python》。请在Q群455547227下载原始数据。) 练习题 下表是某地区2…

C到C嘎嘎的衔接篇

本篇文章,是帮助大家从C向C嘎嘎的过渡,那么我们直接开始吧 不知道大家是否有这样一个问题,学完C的时候感觉还能听懂,但是听C嘎嘎感觉就有点难度或者说很难听懂,那么本篇文章就是帮助大家从C过渡到C嘎嘎。 C嘎嘎与C的区…

企业级移动门户平台是什么?

企业级移动门户平台是为企业提供移动应用和服务的一站式平台。它将企业内部的应用程序和数据集成在一个统一的界面中,方便员工使用,提高工作效率和增强企业的数字化转型能力。WorkPlus作为一种企业级移动门户平台,为企业提供了全面的移动应用…

网络流问题

文章目录 1. 网络流问题基础1.1 概述1.2 常规算法1.3 总结 2. Ford-Fulkerson Algorithm 链接: B站学习视频 1. 网络流问题基础 1.1 概述 最大流问题主要是关于有向图问题。有向图中有m个边, n个节点,其中有一个节点为s[source],还有一个终点 t [sink]…

2A高效率18V输入同步降压稳压器SY8120

前言 SOT23-6封装SY8120外观和丝印:qG 某创批量价格4毛多 概述 SY8120I是一款高效率、同步降压型 DC/DC 转换器,能够提供 2A 负载电流。该SY8120I可在 4.2V 至 18V 的宽输入电压范围内工作,并集成了主开关和同步开关,具有非常低的…

前端JS特效第34波:jQuery支持拖拽图片上传的图片批量上传插件

jQuery支持拖拽图片上传的图片批量上传插件&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>jQuery支持拖拽图片上传的图片批…

freertos源码分析DAY3(二值/计数信号量)

目录 1. 二值信号量 1.1. 二值信号量的创建 1.2 任务中二值信号操作函数 1.2.1 二值信号量的释放 1.2.2 等待二值信号量资源函数 1.3 中断中二值信号量操作函数 1.3.1 中断中释放二值信号量 1.3.2 中断中接收信号量 2. 计数信号量 2.1 计数信号量的创建 信号量&#xff08;Sem…

Backpropagation

在使用gradient descent的时候&#xff0c;神经网络参数θ有很多参数&#xff08;w&#xff0c;b&#xff09;。那gradient就会是一个有成千上万维的vector。所以&#xff0c;Backpropagation在做的事情就是有效的把它&#xff08;上图左侧的向量&#xff09;计算出来。 复习一…

C++初学者指南-5.标准库(第一部分)--标准算法介绍

C初学者指南-5.标准库(第一部分)–标准算法介绍 文章目录 C初学者指南-5.标准库(第一部分)--标准算法介绍C的标准算法是&#xff1a;第一个示例组织输入范围自定义可调用参数并行执行(C17)迭代器和范围的类别错误消息命名空间std::ranges中的算法 (C20)算法参数图标相关内容 C的…

TS真的比JS更好吗?

前言 在讨论TypeScript&#xff08;TS&#xff09;是否比JavaScript&#xff08;JS&#xff09;更好时&#xff0c;我们需要明确“更好”这一概念的上下文和衡量标准。TypeScript和JavaScript在多个方面有着明显的区别&#xff0c;但它们并不是简单的“好”与“不好”的关系&a…

国产数据库VastBase与C/C++程序适配

背景 2022年底的项目&#xff0c;记录一下。 某项目后台使用C程序开发&#xff0c;使用的是OCI连接Oracle数据库。现需要做去O国产化适配改造。 本文聊聊C/C应用程序如何使用VastBase替换Oracle。 编译适配 开发包获取 从VastBase官方或接口人处获取OCI开发包&#xff0c;包含…

线程池笔记

笔记梳理 前言.PHONYC标准库头文件C/C通用或C特有头文件mkdirc_str()snprintfvsnprintfumaskopen函数可变参数列表va_startva_endfunctionalstatic_castpthread_cond_init_threads.emplace_backstd::bindstd::placeholdersThreadPool(const ThreadPool<T> &tp) dele…

博客前端项目学习day01

这里写自定义目录标题 登录创建项目配置环境变量&#xff0c;方便使用登录页面验证码登陆表单 在VScode上写前端&#xff0c;采用vue3。 登录 创建项目 检查node版本 node -v 创建一个新的项目 npm init vitelatest blog-front-admin 中间会弹出询问是否要安装包&#xff0c…

前端Vue组件化实践:打造自定义等宽tabs标签组件

在前端开发的世界里&#xff0c;随着业务复杂度的提升和需求的多样化&#xff0c;传统的整体式开发方式已经难以满足快速迭代和高效维护的需求。组件化开发作为一种重要的解决方案&#xff0c;正逐渐受到广大开发者的青睐。本文将结合Vue框架&#xff0c;探讨如何通过组件化开发…

标签-镜像拉取策略-重启策略-pod优雅终止-pod中容器资源限制-容器类型-容器守护进程-日志排错-容器命令exec-cp

一.标签 1.概述&#xff1a; 标签是附加到kubernets对象&#xff08;比如pod&#xff09;上的键值对&#xff0c;标签可以在创建时附加到对象&#xff0c;随后也可以随时添加修改&#xff1b;标签不支持唯一性。 在k8s中大多数资源都是通过标签进行关联的&#xff08;如pod与s…

DP(3) | 0-1背包 | Java | LeetCode 1049, 494, 474 做题总结

1049. 最后一块石头的重量 II 和 LC 416.分割等和子集 类似 思路&#xff08;我没有思路&#xff09;&#xff1a; 两块石头相撞&#xff0c;这里没有想到的一个点是&#xff0c;相撞的两个石头要几乎相似 以示例1为例&#xff0c;stones [2,7,4,1,8,1]&#xff0c;如果从左到…

【数组、特殊矩阵的压缩存储】

目录 一、数组1.1、一维数组1.1.1 、一维数组的定义方式1.1.2、一维数组的数组名 1.2、二维数组1.2.1、二维数组的定义方式1.2.2、二维数组的数组名 二、对称矩阵的压缩存储三、三角矩阵的压缩存储四、三对角矩阵的压缩存储五、稀疏矩阵的压缩存储 一、数组 概述&#xff1a;数…

HyperSD - 会画草图就能玩AI绘画,AI一键手绘,实时同步 本地一键整合包下载

字节跳动的Lightning团队发布的新图像模型蒸馏算法Hyper-SD&#xff0c;是一项在图像处理和机器学习领域的重要进展。这项技术通过创新的方法提升了模型在不同推理步骤下的性能&#xff0c;同时保持了模型大小的精简。 基于这个算法模型&#xff0c;一个很实用的功能出现了&am…

绝区零 双闪 双闪-三轴 工具

绝区零 双闪 双闪-三轴 工具 0. 演示视频 绝区零&#xff1a;≈100%的极致双闪和双闪-三轴 绝区零&#xff1a;手残党也能打双闪-三轴 1. 基本信息 作者: GMCY系列: 工具系列仓库: GitHub | Gitee话题(GitHub): Tools \ ZenlessZoneZero创建时间: 2024/07/14 2. 声明 !!! 使…