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

news/2024/10/17 20:30:37/

文章目录

  • 一、权限修饰符
  • 二、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;}
}

文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)


http://www.ppmy.cn/news/59369.html

相关文章

一起单测引起的项目加载失败惨案 | 京东云技术团队

作者:京东科技 宋慧超 一、前言 最近在开发一个功能模块时,在功能自测阶段,通过使用单测测试功能的完整性,在测试单测联通性使用到静态方法测试时,发现单测报错,通过查阅解决方案发现需要对Javaassist包进…

题目:16版.学生-成绩关联实体

1、实验要求 本实验要求:实现学生实体类与成绩实体类的关联访问。 1-1. 创建工程并配置环境: 1-1.1. 限制1. 工程取名:SE_JAVA_EXP_E023。 1-1.2. 限制2. 创建包,取名:cn.campsg.java.experiment。 1-2. 创建成绩实体类…

边学边记——数据结构☞和搜索有关的数据结构(搜索树,Set,Map,哈希表)

目录 模型 一、搜索 1. 场景 2. 搜索树 2.1 概念 2.2 查找 2.3 插入 2.4 删除 2.5 实现 2.6 性能分析 2.7 和Java的关系 二、Set 1. 常见方法 2. 注意 三、Map 1. 关于Map.Entry的说明,> 2. Map的常用方法说明 3. 注意 四、哈希表 1. 概念 2. 冲突 2…

女朋友说总是记不住Git命令,怎么办?安排!

如果你也和我女朋友一样总是忘记Git命令,觉得记忆Git命令是很枯燥和麻烦的事情。我写了一个包含了40 条常用Git命令的清单。你一定要收藏起来,当你忘记Git命令的时候,就可以打开来查看啦!!! 1.初始化本地仓…

踩坑集锦之hashcode计算

踩坑集锦之hashcode计算 问题对象hashcode怎么计算出来的HotSpot虚拟机是如何计算出对象hashcode的如何根据对象内存地址计算出对象的hashcode 可变对象加哈希缓存导致的错误问题如何解决 hashcode的取值范围& 0x7FFFFFFF 这个操作有什么作用实例演示 最终解决方案 问题 需…

低代码平台组件间事件交互

事件的分类 我们主要依托于事件来进行组件间的交互。为了满足组件与组件、组件与系统、组件与服务端的交互,我们大致可以将事件分为三个类别: 组件方法:每个组件都会暴露出一些方法供其他组件进行调用。例如表格组件,我们可以暴…

第三十章 金马弹灵

巴哥奔此时才觉察到,在这一横一竖两个椭圆交叉而成的怪厅内,五六位身着白裙的小孩正围着一个蓝色滴形水池绕圈圈。水池上方倒挂着两根相互缠绕着的石笋,刚才那滴水正是从两笋之间的弧形嘴中落下的。 水池的高度与他们的头顶平齐,水…

【PowerDesigner】一款超好用的E-R图工具,快速构建出高质量的数据库结构,提高开发效率和代码质量

博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。博主主页: 是瑶瑶子啦所属专栏: Mysql从入门到精通 近期目标:写好专栏的每一篇文章 文章目录…