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

news2024/11/12 16:38:51

类和对象

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

面向对象概述

两种程序设计方法

  • 结构化程序设计,典型代表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.coloradmin.cn/o/1925744.html

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

相关文章

方波的傅里叶变换及方波的MATLAB实现

一、傅里叶变换简介 傅里叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。傅里叶变换是一种线性的积分变换。它的理论依据是:任何连续周期信号都可以由一组适当的正弦曲线组合…

Mac安装stable diffusion 工具

文章目录 1.安装 Homebrew2.安装 stable diffusion webui 的依赖3.下载 stable diffusion webui 代码4.启动 stable diffusion webui 本体5.下载模型6.这里可能会遇到一个clip-vit-large-patch14报错 参考:https://brew.idayer.com/install/stable-diffusion-webui/…

Unity 优化合集

1️⃣ 贴图优化 1. Read/Write Enable 这个属性勾选后允许你在运行时读取和写入纹理数据,这对于需要实时生成内容或者需要动态修改纹理的场合非常有用但在大部分情况下这是不必要的。如果打开这个属性,会使运行时贴图大小翻倍,内存中会额外…

浅谈C嘎嘎入门基础

看到这篇文章的童鞋或许会有疑惑,这不是之前 已经出过了吗,是的但是之前那篇文章可能不太好理解,因此我再写一篇便于大家理解的文章 那么上一篇文章已经帮大家过渡到C嘎嘎了,那么这篇文章我们继续讲解C嘎嘎的知识点。 C嘎嘎中的引…

牛客:DP25 删除相邻数字的最大分数(动态规划)

文章目录 1. 题目描述2. 解题思路3. 代码实现 1. 题目描述 2. 解题思路 题目的意思是选择某一个数,就会得到这个数 * 它出现的次数的分数,因此为了能快速统计出选择某一个数所能得到的分数,我们可以在输入数据时,使用一个数据来计…

C++的入门基础(二)

目录 引用的概念和定义引用的特性引用的使用const引用指针和引用的关系引用的实际作用inlinenullptr 引用的概念和定义 在语法上引用是给一个变量取别名,和这个变量共用同一块空间,并不会给引用开一块空间。 取别名就是一块空间有多个名字 类型& …

vue3+ECharts实现可视化中国地图

目录 版本问题解决 中国地图实现 版本问题解决 目前echarts的最新版本为5.5.1 echarts在4.9.0版本以后移除了中国地图,所以如果的你的版本高于4.9.0就需要手动导入中国地图。版本低于或者等于4.9.0则不需要导入。 这里我分享一种导入方法: 1.将项目的…

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

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

J027_递归算法

一、求n的阶乘 n的阶乘&#xff1a;1*2*3*4*...*n package com.itheima.d01_file;public class DiguiTest1 {public static void main(String[] args) {//求n的阶乘System.out.println(f(3));System.out.println(f(4));System.out.println(f(5));}private static int f(int n…

[激光原理与应用-111]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 15 - 常见缺陷与波形特征

目录 前言&#xff1a;激光焊接时的光谱特征 可见光 反射光 红外热辐射光 总结 一、动力电池 - 模组 - BusBar焊接 1.1 概述 1.2 没有缺陷波形&#xff1a;一条焊缝 1.3 保护气缺失 1. 可见光 2. 反射光 3. 红外光 综合分析 1.4 功率衰减 1. 可见光 2. 反射光 …

捷配生产总结-PCB上器件布局不好对SMTDIP的影响

在电子制造领域&#xff0c;PCB&#xff08;印刷电路板&#xff09;的设计至关重要&#xff0c;其中器件的布局更是影响着整个生产流程的效率和质量。特别是对于 SMT&#xff08;表面贴装技术&#xff09;和 DIP&#xff08;双列直插式封装&#xff09;这两种常见的组装工艺&am…

STM32之七:SPI通信

目录 1.SPI通信简介 1.1 主从模式 1.2 4根通信线 1.3 数据传输 2. SPI总线时序及其4种工作模式 2.1 SPI数据移位示意 2.2 SPI四种工作模式 2.2.1 mode 0 &#xff1a;CPOL 0,CPHA0 2.2.2 mode 1&#xff1a; CPOL 0&#xff0c;CPHA 1 2.2.3 mode 2&#xff1a; C…

2024-07-14 Unity插件 Odin Inspector1 —— 插件介绍

文章目录 1 介绍2 模块3 学习目的 1 介绍 ​ Odin Inspector 是 Unity 的一个插件&#xff0c;拥有强大、自定义和用户友好的编辑器&#xff0c;而无需编写任何自定义编辑器代码&#xff0c;使得编程过程中的数据可视化更容易实现。 ​ 具体功能包括&#xff1a; 更舒适美观…

新一代大语言模型 GPT-5 对工作与生活的影响及应对策略

文章目录 &#x1f4d2;一、引言 &#x1f4d2;二、GPT-5 的发展背景 &#x1f680;&#xff08;一&#xff09;GPT-4 的表现与特点 &#x1f680;&#xff08;二&#xff09;GPT-5 的预期进步 &#x1f4d2;三、GPT-5 对工作的影响 &#x1f680;&#xff08;一&#xf…

FreeRTOS学习(1)STM32单片机移植FreeRTOS

一、FreeRTOS源码的下载 1、官网下载 FreeRTOS官方链接 官方下载速度慢&#xff0c;需要翻墙&#xff0c;一般选择第一个 2、直接通过仓库下载 仓库地址链接 同样很慢&#xff0c;甚至打不开网页&#xff0c;也不建议使用这种方法。 3、百度网盘 链接&#xff1a;https:…

ArrayList模拟实现

ArrayList模拟实现 ArrayList 的初步介绍常见操作 ArrayList 的简单模拟实现 ArrayList 的初步介绍 ArrayList也叫做顺序表&#xff0c;底层是一个数组。 在创建顺序表 时就应该规定 里面元素的数据类型&#xff0c;其中不能直接传基本数据类型&#xff0c;例如int、char。需要…

超简易高效的 AI绘图工具—与sd-webui一致界面,6G显存最高提升75%出图速率!(附安装包)

大家好&#xff0c;我是灵魂画师向阳 今天给大家分享一个基于Stable Diffusion WebUI 构建的AI绘图工具—sd-webui-forge&#xff0c;该工具的目标在于简化插件开发&#xff0c;优化资源管理&#xff0c;加速推理。 Forge承诺永远不会对Stable Diffusion WebUI用户界面添加不…

链接追踪系列-09.spring cloud项目整合elk显示业务日志

准备工作&#xff1a; 参看本系列之前篇&#xff1a;服务器安装elastic search 本机docker启动的kibana-tencent 使用本机安装的logstash。。。 本微服务实现的logstash配置如下&#xff1a; 使用腾讯云redis 启动本机mysql 启动本机docker 启动nacos,微服务依赖它作为…

rollup打包工具

rollup打包工具 在学习vite和vue3源码的时候&#xff0c;接触到了rollup&#xff0c;所以过来学习一下 什么是rollup rollup是一个模块化的打包工具&#xff0c;会将javascript文件进行合并。比起webpack&#xff0c;webpack在打包的时候会进行代码注入(保障兼容性)&#xf…

fortran简单排序算法,对一维、二维矩阵进行正序或倒序排序

fortran简单排序算法&#xff0c;对一维、二维矩阵进行正序或倒序排序 0. 引言1. 算法实现1.1 一维数组排序1.2 二维数组排序1.2 module文件 2. 结语 0. 引言 排序算法是计算机科学中的一项重要技术&#xff0c;它将一组数据按照特定的顺序排列起来。排序算法有很多种&#xff…