【Java笔记】第9章:三个修饰符

news2024/11/24 9:13:59

  • 前言
  • 1. abstract(抽象的)
  • 2. static(静态的)
  • 3. final(最终的)
  • 结语

在这里插入图片描述
在这里插入图片描述

上期回顾:【Java笔记】第8章:面向对象的三大特性(封装、继承、多态)
个人主页:C_GUIQU
归属专栏:【Java学习】

在这里插入图片描述

前言

各位小伙伴大家好!上期小编给大家讲解了Java中面向对象的三大特性(封装、继承、多态),接下来讲讲Java中的三个修饰符!

1. abstract(抽象的)

在编程语言中,abstract关键字用于表示抽象类或抽象方法。抽象类是不能直接实例化的类,它可能包含未实现的方法(抽象方法)。抽象方法是一种没有实现体的方法,它只有方法的签名,没有大括号和方法体。抽象方法的实现必须在非抽象子类中提供。

在Java中,使用abstract关键字的类和方法有一些特定的规则:

  1. 抽象类:
    • 抽象类不能被实例化。
    • 抽象类可以包含抽象方法和非抽象方法。
    • 抽象类可以包含构造器、静态方法、属性等。
    • 抽象类可以有子类,这些子类必须实现抽象类中的所有抽象方法,除非这些子类也是抽象类。
  2. 抽象方法:
    • 抽象方法没有方法体,即没有大括号和实现代码。
    • 抽象方法只能存在于抽象类中。
    • 子类继承抽象类时,必须实现所有的抽象方法,除非子类也是抽象类。

示例:

abstract class Shape {
    abstract void draw(); // 抽象方法
}
class Circle extends Shape {
    void draw() {
        System.out.println("Draw a circle"); // 实现抽象方法
    }
}
public class Main {
    public static void main(String[] args) {
        Shape s = new Circle(); // 创建抽象类的子类实例
        s.draw(); // 调用实现的方法
    }
}

在上面的例子中,Shape是一个抽象类,它有一个抽象方法draw()Circle类继承了Shape类,并实现了draw()方法。在Main类的main方法中,我们创建了Circle类的实例,并调用了draw()方法。由于Shape是抽象的,我们不能直接实例化它,只能实例化它的具体子类。

2. static(静态的)

在编程语言中,static关键字用于定义静态成员,包括静态变量(类变量)和静态方法(类方法)。静态成员属于类本身,而不是类的任何一个对象实例。因此,静态成员被所有的对象实例共享,并且可以通过类名直接访问,而无需创建类的实例。

以下是static关键字的几个主要用途:

  1. 静态变量(类变量):
    • 静态变量是属于类的,它们在类的所有对象之间共享。
    • 静态变量在类加载时分配内存,只有一份拷贝,不管类的实例有多少个。
    • 静态变量通常用于定义常量或者类的全局状态。
  2. 静态方法(类方法):
    • 静态方法是属于类的,它们可以直接通过类名调用,而无需创建类的实例。
    • 静态方法只能直接访问类的其他静态成员(静态变量和静态方法),它们不能直接访问非静态成员。
    • 静态方法通常用于执行不依赖于对象状态的操作。

示例:

public class Utility {
    public static int count = 0; // 静态变量
    public static void printMessage() { // 静态方法
        System.out.println("This is a static method.");
    }
}
public class Main {
    public static void main(String[] args) {
        Utility.count = 10; // 通过类名访问静态变量
        System.out.println(Utility.count); // 输出静态变量的值
        Utility.printMessage(); // 通过类名调用静态方法
    }
}

在上面的例子中,Utility类有一个静态变量count和一个静态方法printMessage()。在Main类的main方法中,我们直接通过类名Utility来访问静态变量count和调用静态方法printMessage(),而无需创建Utility类的实例。

3. final(最终的)

在编程语言中,final关键字用于表示不可变的引用、方法和类。当final修饰一个变量时,表示该变量的值一旦被初始化之后就不能再改变。当final修饰一个方法时,表示该方法不能被覆盖(重写)。当final修饰一个类时,表示该类不能被继承。

以下是final关键字的几个主要用途:

  1. final变量(常量):
    • final变量可以是类变量(静态变量)或实例变量。
    • final变量必须在声明时或在构造器中初始化,一旦赋值后其值就不能被改变。
    • 如果final变量是一个对象引用,那么该引用本身不能被改变,但是对象的状态可以被改变。
  2. final方法:
    • final方法不能被子类覆盖。
    • final方法可以被继承,但是不能被重写。
    • final方法通常用于阻止子类对方法的改变,确保方法的行为保持不变。
  3. final类:
    • final类不能被其他类继承。
    • final类通常用于创建不可扩展的类,例如Java标准库中的String类。

示例:

public class FinalExample {
    private final int x = 10; // final实例变量
    private static final int Y = 20; // final静态变量(类变量)
    public final void finalMethod() { // final方法
        System.out.println("This is a final method.");
    }
}
public final class FinalClass { // final类
    // 类的实现
}
public class Main {
    public static void main(String[] args) {
        FinalExample example = new FinalExample();
        System.out.println(example.x); // 输出final实例变量的值
        System.out.println(FinalExample.Y); // 输出final静态变量的值
        example.finalMethod(); // 调用final方法
    }
}

在上面的例子中,FinalExample类有一个final实例变量x和一个final静态变量Y,以及一个final方法finalMethod()FinalClass是一个final类,不能被其他类继承。在Main类的main方法中,我们创建了FinalExample类的实例,并访问了它的final变量和方法。由于这些变量和方法都是final的,它们的值和行为都不能被改变或覆盖。

结语

至此,Java的三个修饰符讲解完毕。
感谢您的观看!互三必回!持续更新中~!

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

瑞鑫RK3588 画中画 OSD 效果展示

这些功能本来在1126平台都实现过 但是迁移到3588平台之后 发现 API接口变化较大 主要开始的时候会比较费时间 需要找到变动接口对应的新接口 之后 就比较好操作了 经过几天的操作 已实现 效果如下

项目工具|git相关

本博客暂时只作为个人资料,后续会进行完善,主要内容来自: 【【Git第一讲】:git分区与两个盒子的故事】 理解暂存区和未暂存区 git为什么要多一个暂存区?难道不能我把代码写完后就是未暂存区,然后直接提交…

ROS2从入门到精通4-3:全局路径规划插件开发案例(以A*算法为例)

目录 0 专栏介绍1 路径规划插件的意义2 全局规划插件编写模板2.1 构造规划插件类2.2 注册并导出插件2.3 编译与使用插件 3 全局规划插件开发案例(A*算法)常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建…

docker bash: vi: command not found 修改文件无法使用 vi yum的方法

如题,被入坑很多次。也参考了很多的修复docker 中的vi yum等方法。最终都未解决。 因为要修改 已安装容器中的各类配置信息。无法使用vi yum很麻烦。除去使用docker 挂载文件方法外,还可以使用如下方法直接修改对应的配置文件信息。 如: 修改 logstas…

通过抑制治疗上调的环氧化酶-2来改善光动力性能的肿瘤归巢嵌合肽菱形体

引用信息 文 章:Tumor Homing Chimeric Peptide Rhomboids to Improve Photodynamic Performance by Inhibiting Therapy‐Upregulated Cyclooxygenase-2. 期 刊:Smal(影响因子:13.3) 发表时间&#xff1a…

赢单有秘诀,大模型智能陪练更懂你

随着数字化技术在营销场景的加速应用,产品营销节奏不断加快,消费者需求日益多元化、个性化,市场竞争日趋激烈。面对复杂多变的市场环境,企业新产品、新服务的推出速度大幅提升,产品知识更新愈加频繁,传统的…

神经网络 torch.nn---优化器的使用

torch.optim - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.optim — PyTorch 2.3 documentation 反向传播可以求出神经网路中每个需要调节参数的梯度(grad),优化器可以根据梯度进行调整,达到降低整体误差的作用。下面我们对优化器进行介绍。 …

通过龙讯旷腾PWmat发《The Journal of Chemical Physics》 :基于第一性原理分子动力学热力学积分的离子溶剂化自由能计算

背景导读 离子溶解是电化学中一个重要的过程。电化学反应中许多重要的参数,例如电化学还原电位、无限稀释活度系数、亨利定律溶解常数和离子溶解度等,都与离子的溶剂化能有关。然而,由于测量技术和数据处理的困难,离子溶剂化能的…

LabVIEW与Arm控制器之间的通讯

LabVIEW是一个强大的图形化编程环境,广泛应用于自动化控制、数据采集和测试测量等领域。而Arm控制器则是嵌入式系统中常用的处理器架构,广泛用于各种控制和计算任务。将LabVIEW与Arm控制器进行通讯控制,可以结合二者的优势,实现高…

笔记96:前馈控制 + 航向误差

1. 回顾 对于一个 系统而言,结构可以画作: 如果采用 这样的控制策略,结构可以画作:(这就是LQR控制) 使用LQR控制器,可以通过公式 和 构建一个完美的负反馈系统; a a 但是有上…

学习笔记——网络参考模型——TCP/IP模型(网络层)

三、TCP/IP模型-网络层 1、IPV4报头 (1)IPV4报文格式 IP Packet(IP数据包),其包头主要内容如下∶ Version版本∶4 bit,4∶表示为IPv4; 6∶表示为IPv6。 Header Length首部长度∶4 bit,代表IP报头的长度(首部长度),如果不带Opt…

安卓手机平板使用JuiceSSH无公网IP远程连接本地服务器详细流程

文章目录 前言1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 前言 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? 本文就和大家分享一下如何使用 cpolarJuiceSSH 实现手机端远程连接Linux…

conntrack如何限制您的k8s网关

1.1 conntrack 介绍 对于那些不熟悉的人来说,conntrack简单来说是Linux内核的一个子系统,它跟踪所有进入、出去或通过系统的网络连接,允许它监控和管理每个连接的状态,这对于诸如NAT(网络地址转换)、防火墙和保持会话连续性等任务至关重要。它作为Netfilter的一部分运行,…

Ubuntu的启动过程

尽管通常情况下Ubuntu的启动并不需要用户过多地参与,但是Ubuntu系统的启动本身是一个非常复杂的过程。在这个过程中,有硬件的检测、系统内核的准备以及各种系统服务的启动等。作为系统管理员,需要深入了解其中所经历的阶段,才能在…

Cesium开发环境搭建(二)

由于win7搭建很费事,重新安装了OS,win10的。 记录一下,搭建步骤: 1.下载node.js。 百度搜索即可下载对应的版本。下载cesium。 2.安装node.js。 安装后,输入node -v,显示版本信息,表示安装…

【面试干货】索引的作用

【面试干货】索引的作用 1、索引的作用 💖The Begin💖点点关注,收藏不迷路💖 1、索引的作用 索引 可以协助 快速查询、更新数据库表中数据。 通过使用索引,数据库系统能够快速定位到符合查询条件的数据,提…

1.6T模块与DSP技术的演进

近日,光通信行业市场机构LightCounting在市场报告中指出,去年的模块供应商已经展示了首批1.6T光学模块的风采,而今年,DSP供应商更是着眼于第二代1.6T模块设计的未来。这些前沿技术的突破,不仅代表了数据传输速度的飞跃…

【set】集合总结

一、Set Set集合是Collection的子接口,代表一种集合,此种集合是元素不重复. 有两个常用实现类 HashSet 是元素不重复,无序,主要是指遍历顺序和插入顺序不一致 TreeSet 是元素不重复,排序 LinkedHashSet不常用 二、HashSet 1.1 介绍 HashSet是Set的实现类 底层是由哈希表实…

Python数据分析I

目录 注:简单起见,下文中"df"均写为"表名","函数"均写为"HS","属性"均写为"SX","范围"均写为"FW"。 1.数据分析常用开源库 注释…

物联网-高性能时序数据库QuestDB

高性能时序数据库QuestDB 开源地址:https://github.com/questdb/questdb 官网:https://questdb.io/ 当前 13.9k start 自带免费可视化管理界面 支持各种语言客户端 C & C .NET Go Java Node.js Python Rust 上手容易可兼容 Postgresql InfluxDB …