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

这篇具有很好参考价值的文章主要介绍了Java 基础进阶篇(三)—— 权限修饰符、final 关键字与枚举。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、权限修饰符

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

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

Java 基础进阶篇(三)—— 权限修饰符、final 关键字与枚举
注: 不同包下的子类指的是,不同包下的子类对象能访问,当前类创建父类对象访问不了。

// 模拟不同包下的子类
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 修饰,不写也有。如我们一般在项目中定义的常量接口:

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


三、枚举

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

3.1 枚举的格式

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


3.2 枚举的特征

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

使用 javap 命令反编译 class 文件得到如下结果:
Java 基础进阶篇(三)—— 权限修饰符、final 关键字与枚举

特征如下:

① 枚举类都是继承了枚举类型 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真题)文章来源地址https://www.toymoban.com/news/detail-431210.html

到了这里,关于Java 基础进阶篇(三)—— 权限修饰符、final 关键字与枚举的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java面向对象——多态、Object类、instanceof关键字以及final关键字

    总之,多态是面向对象编程中一个非常重要的概念,通过它可以实现统一的接口来操作不同的对象,提高代码的可读性和可维护性。在实际编程中,多态性的使用可以使代码更加灵活和扩展性更强。方法重写是实现多态的基础。 重写如下所示 关于hashCode方法的重写: 重写t

    2024年02月12日
    浏览(47)
  • 浅析Java中的final关键字(详细)

    1.什么是final(概念) 2.final基本用法 3.深入理解final 4.final 的最佳实践 谈到final,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final 。final 是 Java 中的一个,可以用于修饰类、方法和变量。当一个类被声明为

    2024年02月03日
    浏览(30)
  • Java 基础进阶篇(一)——— static 静态关键字与单例模式

    static:代表静态的意思,可以修饰成员变量,可以修饰成员方法。 static 修饰方法之后称为 静态方法(类方法) ,修饰成员变量之后称为 静态成员变量(类变量) 。 static 修饰后的成员变量, 可以被类的所有对象共享 (访问、修改) 。 静态成员变量 实例成员变量 概述 有

    2024年02月01日
    浏览(69)
  • static关键字和final关键字

    在java的中,static和final是两个必须掌握的。static和final用法多样,且在一定环境下使用,可以提高程序的运行性能,优化程序的结构。下面将依次介绍static和final。注意,某些场景下,staic和final可以联合使用

    2024年02月09日
    浏览(37)
  • final 关键字的用法

    final; //使用的位置: 1.用于声明常量:基本数据类型的常量不允许修改值,                            引用数据类型的常量不允许重新分配内存地址 2.用于声明方法(最终方法),该方法在了类中不能重写,在当前类中允许重载 3.用于声明类(最终类), 该类不允许子类继承

    2024年01月21日
    浏览(33)
  • final关键字的作用

    目录 1.修饰类时 2.修饰方法时 3.修饰属性和局部变量时 3.1修饰局部变量时 3.2修饰成员变量时 3.3修饰类变量时 4.final与普通变量的区别 5.final用于引用 1.只能是公共的(public)就算不写也是public 2.被final修饰的类不可以被继承 1.方法不能不能覆盖 2.被final修饰的方法,JVM会尝试

    2024年02月05日
    浏览(31)
  • Final关键字的使用技巧及其性能优势

    Java中的final用于修饰变量、方法和类,可以让它们在定义后不可更改,从而提高程序的稳定性和可靠性。此外,final还有一些使用技巧和性能优势,本文将详细介绍它们。 在Java中,final用于修饰变量、方法和类,其基本用法如下: 修饰变量 当我们使用f

    2024年02月03日
    浏览(71)
  • 面向对象(八)-- static 与 final 关键字 的使用

    目录 1.  static 1.1  static 的概述 1.2  static 修饰的特点 1.3  static 使用时的注意事项:

    2023年04月25日
    浏览(31)
  • 我在VScode学Java类与对象(Java显式参数和隐式参数、静态方法+main方法、Java访问修饰符、static关键字、Java的包、对象数组)第三辑

    我的个人博客主页:如果’\\\'真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习----可以参考我的这篇博客:《我在VScode学Java》 方法会操作对象并访问他们的实例字段。 在Java中,显式参数和隐式参数是方法调用中的两种不同类型的参数。 注释: 第7行: sum 方法的参数

    2024年02月16日
    浏览(70)
  • 【Java基础】volatile关键字

    关于作者:CSDN内容合伙人、技术专家, 从零开始做过日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 我们继续总结学习Java基础知识,温故知新。 volatile 是一个Java,可以用来修饰变量,volatile也被称为轻

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包