java面向对象进阶进阶篇--《包和final》

一、前言

今天还是面向对象相关知识点的分享,包是写小型项目时不可或缺的存在,final关键字用的地方不算太多。idea会提示我们导包,有时会自动导包,确实十分方便。但是我们也不能不会自己去导包。

面向对象篇不出意外的话本周就要结束了。希望大家多多支持。

 

二、包

在Java中,包(Package)是一种组织和管理类及其他资源的机制。

1. 组织类和资源

包提供了一种层次化的结构,用于组织Java类和其他资源文件。通过包,可以将相关联的类和接口组织在一起,形成一个逻辑上的单元。

2. 命名空间管理

包在Java中还用于管理命名空间(Namespace)。每个包中的类都具有唯一的全限定名(Fully Qualified Name),这包括包名和类名。这种命名空间的分隔避免了不同包中类名冲突的问题。

3. 访问控制

Java中的包也与访问控制密切相关。类可以通过publicprotectedprivate和默认访问(不使用关键字修饰)来定义其可见性。包访问权限(default)指的是同一个包中的其他类可以访问该类的包级私有成员。

4. 包路径

包在文件系统中以文件夹的形式存在。例如,包com.example.util通常对应于文件系统中的路径com/example/util/。这种结构使得Java编译器和虚拟机可以找到并加载正确的类文件。

5. 包的声明

在Java源文件的开头,通过package语句来声明类所属的包。例如:

package com.example.util;public class StringUtil {// 类定义
}

6. 导入其他包

Java中使用import语句来导入其他包中的类,以便在当前文件中使用这些类而不必使用其全限定名。例如:

package com.example.app;import com.example.util.StringUtil;public class MyApp {public static void main(String[] args) {String message = "Hello, World!";String reversed = StringUtil.reverse(message);System.out.println(reversed);}
}

7. 标准库和第三方库

Java标准库(Java Standard Library)和第三方库通常也通过包的形式来组织。这使得开发人员可以轻松地使用和管理大量的类和资源。

注:使用其他类的规则

  • 使用同一个包中的类时,不需要导包。
  • 使用java.lang包中的类时,不需要导包。(例如:String)
  • 其他情况都需要导包
  • 如果同时使用两个包中的同名类,需要用全类名

示例: 

 使用其他包中的类,千万别忘了导包!!!

 

三、final

在Java中,final关键字可以用来修饰类、方法和变量,具有不同的作用和语义,final 关键字在Java中用于限制类、方法和变量的修改或继承,是Java语言中的重要保护和优化机制之一。

1. final 修饰类

当用 final 修饰一个类时,表示这个类是最终类,即不能被继承。这样的类不能有子类。示例:

final class FinalClass {// 类定义
}

2. final 修饰方法

当用 final 修饰一个方法时,表示这个方法是最终方法,不能被子类重写(override)。这在设计模式中有时用于确保方法的实现不被修改或覆盖。示例:

class Parent {public final void finalMethod() {// 方法定义}
}class Child extends Parent {// 编译错误:finalMethod() 在 Parent 中已经是 final,不能被重写
}

3. final 修饰变量

在Java中,final 可以修饰变量,有以下几种情况:

  • 修饰成员变量(字段):如果用 final 修饰一个成员变量,表示这个变量是一个常量,只能被赋值一次。如果是基本数据类型,一旦被赋值后就不能再改变其值;如果是引用类型,则表示该引用不能再指向另一个对象,但对象本身是可以修改的。示例:

    class MyClass {final int constantVar = 10; // 常量成员变量public void changeVar() {// 编译错误:不能修改 final 变量的值constantVar = 20;}
    }
    
  • 修饰局部变量:在方法或者代码块内部使用 final 修饰局部变量,表示该变量只能赋值一次。这在多线程环境或者匿名内部类中比较有用。示例:

    public void method() {final int localVar = 100; // 常量局部变量// 编译错误:不能再次赋值localVar = 200;
    }
    

 

其他注意事项:

  • final 修饰的类不能被继承,这种类的设计主要用于安全或性能考虑,避免被修改或者继承后破坏其设计。

  • final 修饰的方法不能被重写,这可以确保方法的行为在子类中不会被修改。

  • final 修饰的变量在赋值后不能再次修改其值,确保其值的不可变性。

示例:

方法

变量

四、常量

在Java中,常量指的是在程序运行期间值不会发生改变的变量。常量是程序中一种重要的编程元素,它们提供了一种稳定的、不可变的值,有助于代码的健壮性和可维护性。

使用 final 关键字

通过 final 关键字可以定义常量,可以是类常量(静态常量)或实例常量(成员变量)。final 常量必须在声明时进行初始化,并且不能再次赋值。示例:

  • 类常量示例:

    public class Constants {public static final int MAX_SIZE = 100;public static final String APP_NAME = "MyApp";
    }
    

    在其他类中可以直接通过 Constants.MAX_SIZEConstants.APP_NAME 来访问这些常量。

  • 实例常量示例:

    public class MyClass {public final int MAX_CONNECTIONS = 10;public final String DEFAULT_NAME = "John Doe";
    }
    

    这些实例常量在每个实例化的对象中都有自己的副本,但值是不可变的。

2. 使用 static final 定义常量

在类级别定义常量时,通常使用 static final 关键字组合。这种方式定义的常量在整个类的生命周期内只有一个副本,所有实例共享。示例:

public class Config {public static final String DATABASE_URL = "jdbc:mysql://localhost:3306/mydatabase";public static final int MAX_THREADS = 50;
}

这样定义的常量可以通过 Config.DATABASE_URLConfig.MAX_THREADS 访问。

3. 枚举类型

Java中的枚举类型也可以用来定义常量,每个枚举常量都是一个实例对象,它们是不可修改的。示例:

public enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

在代码中使用枚举常量时,例如 Day.MONDAY,它表示一个固定的、不可变的值。

4. 字面值常量

Java中的字面值常量指的是直接写在代码中的数值或字符串,它们在编译时就已经确定了其值,不会发生改变。例如:

int num = 42; // 42 是一个字面值常量
String name = "Alice"; // "Alice" 是一个字面值常量

这些常量的值在程序运行期间是不可修改的。

使用常量的好处:

  • 代码可读性和维护性:通过命名常量,可以提高代码的可读性和可维护性,减少了魔法数值或字符串的使用。

  • 安全性和稳定性:常量一旦定义后不能被修改,可以在一定程度上保证程序的安全性和稳定性。

注:记录的地址值不能发生改变,内部属性可以改变。

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

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

相关文章

22集 如何minimax密钥和groupid-《MCU嵌入式AI开发笔记》

22集 如何获取minimax密钥和groupid-《MCU嵌入式AI开发笔记》 minimax密钥获取 https://www.minimaxi.com/platform 进入minimax网站,注册登录后,进入“账户管理”, 然后再点击“接口密钥”,然后再点击“创建新的密钥”。 之…

《0基础》学习Python——第十九讲__爬虫/<2>

一、用get请求爬取一般网页 首先由上节课我们可以找到URL、请求方式、User-Agent以及content-type 即:在所在浏览器页面按下F12键,之后点击网路-刷新,找到第一条双击打开标头即可查看上述所有内容,将上述URL、User-Agent所对应的…

1.6、计算机系结构

Flynn分类法 Flynn分类法是1966年,M. J. Flynn提出的根据指令流、数据流的多倍性特征对计算机系统的分类方法。 指令流为机器执行的指令序列。数据流是由指令调用的数据序列。包括输入数据和中间结果,不包括输出数据 分类 Flynn把计算机系统的结构分…

初学MWA(Modern Web App)那些事-3-做一个简单的计算器

初学MWA(Modern Web App)那些事-3-做一个简单的计算器 目录 初学MWA(Modern Web App)那些事-3-做一个简单的计算器前言一、本节学习目标二、计算器实例项目创建过程2.1 创建一个HTML文档2.2 查看新建的html文档2.3 Web应用开发:初始化设置2.4…

linux C++ onnxruntime yolov8 视频检测Demo

linux C onnxruntime yolov8 视频检测Demo 目录 项目目录 效果 ​编辑CMakeLists.txt 代码 下载 项目目录 效果 ./yolov8_demo --help ./yolov8_demo -c2 -ptrue ./yolov8_demo -c1 -strue CMakeLists.txt # cmake needs this line cmake_minimum_required(VERSION 3…

AMD EPYC处理器性能宣称远超Nvidia Grace CPU

AMD近期发布了一份博客文章,其中对比了其EPYC处理器与Nvidia Grace Hopper Superchip(基于Arm架构的72核CPU)在一系列基准测试中的性能,声称EPYC处理器在多种工作负载下的表现最多可高出两倍。这一比较突显了AMD在数据中心CPU市场…

Covalent(CXT)运营商网络规模扩大 42%,以满足激增的需求

Covalent Network(CXT)是领先的人工智能模块化数据基础设施,网络集成了超过 230 条链并积累了数千名客户,目前 Covalent Network(CXT)网络迎来了五位新运营商的加入,包括 Graphyte Labs、PierTw…

使用PicGo操作gitee图床(及web端html不能访问图片的解决办法)

1.新建仓库 2.输入仓库名称,也就是图床名称,必须设置开源可见 也可以在创建仓库后,点击管理->基本信息->是否开源进行设置 鼠标悬浮到右上角头像->设置 点击私人令牌 点击生成新令牌,填写描述,直接点提交即可 点击提交后输入登录密码会生成一个token秘钥,如下,这个…

【C++】——初识模版

文章目录 前言函数模版函数模版的原理函数模版的实例化 类模版类模版的实例化 前言 当我们使用一个通用的函数: //为每一个类型都编写一个重载版本 void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& …

在Linux、Windows和macOS上释放IP地址并重新获取新IP地址的方法

文章目录 LinuxWindowsmacOS 在Linux、Windows和macOS上释放IP地址并重新获取新IP地址的方法各有不同。以下是针对每种操作系统的详细步骤: Linux 使用DHCP客户端:大多数Linux发行版都使用DHCP(动态主机配置协议)来自动获取IP地址…

七、系统配置与性能评价(考点篇)

1 性能指标 性能指标,是软、硬件的性能指标的集成。在硬件中,包括计算机、各种通信交换设备、各类网 络设备等;在软件中,包括:操作系统、协议以及应用程序等。 1.计算机 对计算机评价的主要性能指标有: 时…

【嵌入式开发之数据结构】树的基本概念、逻辑结构和四种常用的遍历算法及实现

树(Tree)的定义及基本概念 树的定义 树(Tree)是个结点的有限集合T,它满足两个条件: 有且仅有一个特定的称为根(Root)的节点;其余的节点分为个互不相交的有限合集,其中每一个集合又…

日常开发记录分享——C#控件ToolTip实现分栏显示内容

文章目录 需求来源实现思路实施请看VCR等等别走,有优化 需求来源 需要在鼠标浮动到指定位置后提示出详细的信息,一开始使用的tooltip实现,但是里面的内容效果并不理想,需要有条理性,于是就想到能不能将展示的东西分列…

【Goland编辑器】Goland编辑器设置代码跳转的地方

记录一下: 关闭了插件里面proto相关的插件后, 在这里将Custom folding regions打开后, 点击代码跳转时,由proto生成的文件,就不会再跳转到proto定义处,而是跳转到代码使用的地方【正是我需要的】。

PHP接入consul,注册服务和发现服务【学习笔记】

PHP接入consul,注册服务和发现服务 consul安装 链接: consul安装 启动consul C:\Users\14684>consul agent -dev安装TP5 composer create-project topthink/think5.0.* tp5_pro --prefer-dist配置consul 创建tp5_pro/application/service/Consul.php <?php /*****…

linux版mysql8配置表名不区分大小写

mysql8的安装步骤可参考&#xff1a; mysql8的安装步骤 如果在安装mysql8&#xff0c;初始化之前&#xff0c;没有在my.cnf配置忽略大小写配置&#xff1a; [mysqld] lower_case_table_names1我们就需要重新初始化mysql 1 备份数据库文件 2 停止mysql服务 systemctl stop …

iOS开发设计模式篇第一篇MVC设计模式

目录 1. 引言 2.概念 1.Model 1.职责 2.实现 3.和Controller通信 1.Contrller直接访问Model 2.通过委托(Delegate)模式 3.通知 4.KVO 4.设计的建议 2.View 1.职责 2.实现 3.和Controller通信 1. 目标-动作&#xff08;Target-Action&#xff09;模式 2…

尾气处理系统工作原理

尾气处理系统工作原理 尾气处理系统是汽车发动机排放净化的重要部分&#xff0c;其中主要包括三元催化器、颗粒捕集器和尿素喷射系统等。以下是尾气处理系统的工作原理&#xff1a; 三元催化器&#xff1a;三元催化器是尾气处理系统中最常见的部件&#xff0c;三元催化器是尾气…

汉明权重(Hamming Weight)(统计数据中1的个数)VP-SWAR算法

汉明权重&#xff08;Hamming Weight&#xff09;&#xff08;统计数据中1的个数&#xff09;VP-SWAR算法 定义 汉明重量是一串符号中非零符号的个数。它等于同样长度的全零符号串的汉明距离(在信息论中&#xff0c;两个等长字符串之间的汉明距离等于两个字符串对应位置的不同…

USB转多路串口 - USB CDC设备枚举

先上参考资料&#xff1a; ST社区的&#xff1a; <<USB CDC类入门培训.pdf>>STM32 USB如何配置多个CDC设备状态与枚举过程CDC串口之从认识到认知 USB CDC 类基础 CDC(Communication Device Class)类是 USB2.0 标准下的一个子类&#xff0c;定义了通信相关设备的抽…