Java 基础进阶篇(三):权限修饰符、final 关键字与枚举

news2024/7/4 4:27:45

文章目录
  • 一、权限修饰符
  • 二、final 关键字
  • 2.1 final 作用
  • 2.2 final 修饰变量举例
  • 2.3 常量
  • 三、枚举
  • 3.1 枚举的格式
  • 3.2 枚举的特征
  • 3.3 枚举的应用


一、权限修饰符

权限修饰符 用于约束成员变量、构造器、方法等的访问范围。

权限修饰符: 有四种作用范围由小到大 (private -> 缺省 ->protected - > public)

在这里插入图片描述
注: 不同包下的子类指的是,不同包下的子类对象能访问,当前类创建父类对象访问不了。

// 模拟不同包下的子类
public class Zi extends Fu {
    public static void main(String[] args) {
        Fu fu = new Fu();
        // fu.privateMethod(); 访问不了
        // fu.method(); 访问不了
        // fu.protectedMethod(); 访问不了
        fu.publicMethod();

        Zi zi = new Zi();
        zi.protectedMethod(); // 可以访问 protected
    }
}

定义成员变量、构造器、方法等一般需满足如下要求:

① 成员变量一般私有。
② 方法一般公开。
③ 如果该成员只希望本类访问,使用 private 修饰。
④ 如果该成员只希望本类,同一个包下的其他类和子类访问,使用 protected 修饰。


二、final 关键字

2.1 final 作用

final 关键字是最终的意思,可以修饰类、方法与变量。

  • 修饰类: 类不能被继承。工具类可以用 final 修饰。
  • 修饰方法: 方法不能被重写。 模板方法可以用 final。
  • 修饰变量: 有且仅能被赋值一次。

2.2 final 修饰变量举例

final 修饰 基本数据类型 的变量,其存储的数据不能改变
final 修饰 引用类型 的变量,其存储的地址不能改变,但是指向的对象内容可以改变

举例:final 修饰变量

public class Test {
    // 修饰静态成员变量( public static final 修饰的也称为常量,必须一次赋完值 )
    public static final String name = "idea"; // 引用类型

    // 修饰实例成员变量( 必须一次赋完值,几乎不用 )
    public final String novelName = "孙悟空";

    public static void main(String[] args) {
        // final 修饰变量,总规则:变量有且仅能赋值一次
        // 变量有两种:局部变量;成员变量(实例成员变量、静态成员变量)

        // 局部变量
        final double rate = 3.14; // 基本数据类型
        // rate = 4.23; 报错,第二次赋值

        // 成员变量
        // name = "dev"; // 报错,第二次赋值

        // new Test().novelName = "唐僧"; // 报错,第二次赋值
    }
}

new Test().novelName = “唐僧”; 报错是由于引用地址发生了变化,内存原理是在堆内存的常量池中存储了一个“唐僧”的变量,并将引用地址赋给 novelName。

参考:Java 基础入门篇(六)—— String 类详解

举例:final 修饰引用类型的变量

class Teacher{
    private String hobby;
    public Teacher(String s) {
        hobby = s;
    }
    public String getHobby() {
        return hobby;
    }
    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
}

public class Test {
    public static void main(String[] args) {
        // 注意: final修饰引用类型的变量,其地址值不能改变,但是指向的对象的内容可以改变的。
        final Teacher teacher = new Teacher("学习,授课");
        teacher.setHobby("打篮球");
        System.out.println(teacher.getHobby()); // 打篮球
    }
}

没有报错的原因:虽然 teacher 对象内部的引用数据的地址发生了变化,但是 teacher 对象的引用地址没有发生变化。


2.3 常量

常量是 public static final 修饰的成员变量,有且仅能赋值一次。

作用:做系统的配置信息,方便程序维护,提高可读性。
规范:名称全部大写,多个单词用下划线连接
常量会出现宏替换:所以常量名的地方在编译后都是变成真实的数据。

接口中的常量,默认加上 public static final 修饰,不写也有。如我们一般在项目中定义的常量接口:

在这里插入图片描述


三、枚举

枚举是一种特殊类型,其用来做信息的标志和信息的分类。

3.1 枚举的格式

在这里插入图片描述


3.2 枚举的特征

反编译后观察枚举的特征:

使用 javap 命令反编译 class 文件得到如下结果:
在这里插入图片描述

特征如下:

① 枚举类都是继承了枚举类型 java.lang.Enum。
② 枚举都是最终类,不可以被继承。
③ 构造器的构造器都是私有的,枚举对外不能创建对象。(看不到)
④ 枚举类的第一行默认都是罗列枚举对象的名称的。
⑤ 枚举类相当于是多例模式,如上文只有四个对象。


3.3 枚举的应用

应用 1:业务枚举类与业务结果包装类

/**
 * 业务消息枚举
 */
public enum CodeMsg {

    SUCCESS(200, "操作成功"),
    ERROR(110, "程序员送外卖去了"),
    
    USERNAME_PASSWORD_ERROR(4001001, "用户名或者密码错误!"),
    USER_LOGIN_NAME_EXIST_ERROR(4001002, "用户登陆名已经存在!"),
    USER_PHONE_EXIST_ERROR(4001003, "用户手机号已被使用!");

    public Integer code; // 业务码
    public String msg; // 业务消息

    CodeMsg(Integer code, String msg){
        this.code = code;
        this.msg = msg;
    }
}
/**
 * 业务结果包装类
 * 前端需要: code msg data 这样的数据格式
 * 因此后端对数据进行包装
 */
@Data
public class Result {

    private Integer code; //业务码
    private String msg; // 业务消息
    private Object data; // 业务数据

     /*
    所有的业务分为两种情况:
        1. 成功:
            1. 成功了没数据  如:删除
            2. 成功了有返回数据  如:查询
        2. 失败:
            失败时没有数据,返回失败原因
     */

    /**
     * 成功没有数据
     */
    public Result(){
        this.code = CodeMsg.SUCCESS.code;
        this.msg = CodeMsg.SUCCESS.msg;
    }

    /**
     * 成功有数据
     */
    public Result(Object data){
        this();
        this.data = data;
    }

    /**
     * 失败时没有数据,返回失败原因
     */
    public Result(CodeMsg codeMsg){
        this.code = codeMsg.code;
        this.msg = codeMsg.msg;
    }

    /**
     * 兼容异常信息
     *      因为异常中 code 和 msg
     * @param businessException
     */
    public Result(BusinessException businessException){
        this.code = businessException.getCode();
        this.msg = businessException.getMessage();
    }
}

应用 2:switch 兼容枚举类

public void showSeason(Season s){
	switch (s){
	    case SPRING: // 不用写成 s.SPRING, switch 兼容枚举
	        break;
	    case SUMMER:
	        break;
	    case AUTUMN:
	        break;
	    case WINTER:
	        break;
	    default:
	        break;
	}
}

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

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

相关文章

Unity 如何导入二进制Spine文件

Unity 如何导入二进制Spine文件 前言步骤1.修改拓展名2.修改参数3.导出文件4.导入文件5.修改材质球属性6.生成动画 参考 前言 总是忘记Spine导出二进制到Unity的设置,记录一下。 步骤 1.修改拓展名 纹理打包器也修改一下拓展名(日常操作)…

word@制表位和列数据对齐@填空下划线制作

文章目录 refs制表位(tab stop)制表位类型 制作对其的下划线填空表单👺利用前导符代替下划线制作待填空下划线 制表位对其列数据模拟简单表格测试数据设置引线使用标尺设置 FAQ refs Insert or add tab stops - Microsoft SupportUsing the ruler in Word - Micros…

GaN HEMT主要性能指标有哪些?宽禁带材料电性能测试方案

GaN HEMT器件性能的评估,一般包含静态参数测试(I-V测试)、频率特性(小信号S参数测试)、功率特性(Load-Pull测试)。静态参数,也被称作直流参数,是用来评估半导体器件性能…

JVM理论(一)-基础概念

JVM概述 JVM就是二进制字节码的运行环境,负责装载字节码到其内存,解释/编译为对应平台上的机器指令执行,每条java指令在java虚拟机规范中都有详细定义,包括如何取、处理操作数等;JVM特点如下 一次编译,到处运行(各CPU的架构不同的情况下JVM为了实现跨平台,字节码指…

fastadmin使用PHPexcel上传文件处理兼容问题 (已解决)

介绍 fastadmin:支持使用7.0以上版本的PHP PHPexcel:不支持使用7.0以上的PHP版本 2.下载地址 https://codeload.github.com/PHPOffice/PHPExcel/zip/1.8 3:解决兼容 将文件导入到vendor下面,创建一个函数来使用这个文件&…

5.8.10 TCP协议

5.8.10 TCP协议 我们通过一个实例来看一下TCP协议 如图 图中是六个IP数据报的前40个字节的内容,使用的是16进制数表示的,该数据报的背景如下图 主机H通过快速以太网连接Internet,主机H的IP地址是192.168.1.100,服务器S的IP地址是…

高迸发 架构设计方案

前言 ​​在实际生活业务场景开发中,在我们的网站知名度越来越大的时候,随之而来的就是业务体量越来越大,用户群体越来越大,随之而来的技术要求也越来越高,其中核心点对网站的稳定性要求是硬性的。如果一个系统都无法…

新装idea的一些常用设置

新装idea的一些常用设置 新安装的idea常用配置 1、提示内容忽略大小写 File -> Settings -> Editor -> General -> Code Completion -> Match case 2、修改字体大小 File -> Settings -> Editor -> Font -> Size 3、取消启动时自动打开最后开…

阿里云国际站:阿里云计算服务指的是什么?

标题:阿里云计算服务指的是什么? 一、阿里云计算服务的定义   阿里云计算服务,是阿里巴巴集团旗下的云服务平台,提供了从云服务器、云数据库到大数据处理等丰富的云计算服务。它通过构建一种共享的计算资源池,使得用…

《SpringBoot》第05章 配置文件解析

前言 SpringBoot中的application.properties(或application.yaml)文件都是再熟悉不过的了。它是应用的配置文件,我们可以把需要的一些配置信息都写在这个文件里面,需要的时候,我们可以通过Value注解来直接获取即可,那这个文件是什…

deepstream指北——python接口的使用

目录 一、机器配置二、环境配置三、运行实例 一、机器配置 电脑:台式机系统:Ubuntu 20.04.5显卡:GTX 1070,8G显存软件版本:deepstream:6.1.1显卡驱动版本:515.76CUDA版本:11.7.1cud…

基于PyQt5的桌面图像调试仿真平台开发(10)色彩矩阵

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

当赛博朋克碰上小鸡舞 segment anything

Segment Anything能给我们做什么 前言内容具体实现成果 前言 最近,大模型的热度确实是非常非常的高,从chatgpt到segment anything,这些东西整的我这刚入门的小白确实有点懵逼。最近实在是不知道干啥, 想想能不能用大模型整点花活…

Spring后置处理器BeanFactoryPostProcessor与BeanPostProcessor源码解析

文章目录 一、简介1、BeanFactoryPostProcessor2、BeanPostProcessor 二、BeanFactoryPostProcessor 源码解析1、BeanDefinitionRegistryPostProcessor 接口实现类的处理流程2、BeanFactoryPostProcessor 接口实现类的处理流程3、总结 三、BeanPostProcessor 源码解析 一、简介…

uniapp 之 多端实现图片压缩(含H5实现)

compressImage 说明 文档平台差异说明已标出:官网提供的api uni.compressImage除了H5平台,其余平台都支持,所以我们利用条件编译,然后单独处理一下H5的图片压缩即可。 utils.js 里面封装一下该方法,方便调用 /*** 图…

-Xloggc:d:/gc.log

-Xloggc:d:/gc.log把信息记录成 log文件参数-Xmx20m -Xms20m -XX:NewRatio4 -XX:SurvivorRatio2 -Xss1m -XX:PrintGCDetails -XX:UseSerialGC -XX:PrintCommandLineFlags -Xloggc:d:/gc.log结果[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y3PpljS…

【PyTorch API】 nn.RNN 和 nn.LSTM 介绍和代码详解

文章目录 1. nn.RNN 构建单向 RNN2. nn.LSTM 构建单向 LSTM3. 推荐参考资料 1. nn.RNN 构建单向 RNN torch.nn.RNN 的 PyTorch 链接:torch.nn.RNN(*args, **kwargs) nn.RNN 的用法和输入输出参数的介绍直接看代码: import torch import torch.nn as n…

商业模式画布

商业模式画布给了创业者一个思考的框架,在行动之前充分思考和演练。 文章目录 认识商业模式画布九个组成部分(以Zoom为例拆解)收入成本 九个组成部分的关系总结 认识商业模式画布 九个组成部分(以Zoom为例拆解) 收入 成…

七月创作之星挑战赛开始咯~

活动火热进行中! 欢迎各位大佬积极参与~ 大家请加入卡奥斯开源社区官方社群哦,最新活动实时更新! 还有专属群内福利(蛋糕券、购物卡、周边礼品)等你来拿~ 礼品详情

高效管理工作任务,推荐优秀任务管理软件助力工作效率提升

任务管理软件是一种用于组织任务、将任务分配给个人并监控其进展的软件。该软件可以帮助确保任务在预算内按时完成。它在协同工作环境中特别有用,在这种环境中,多人在处理需要跟踪和监视的任务。 任务管理软件可以帮助简化分配任务和监控任务进度的过程。…