Java基础学习day07

简介: 本节讲解Java中的final关键字、单例设计模式、枚举类、抽象类与接口。涵盖常量定义、单例写法(饿汉式/懒汉式)、枚举特点及应用场景,以及抽象类与接口的使用与区别,助力掌握核心面向对象编程思想。

Java基础学习day07

final

定义

  • final 关键字是最终的意思,可以修饰:类、方法、变量。
  • 修饰类:该类被称为最终类,特点是不能被继承了。
  • 修饰方法:该方法被称为最终方法,特点是不能被重写了。
  • 修饰变量:该变量有且仅能被赋值一次。
  • 注意事项:
  • final修饰基本类型的变量,变量存储的数据不能被改变。
  • final修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象的内容是可以被改变

常量

1、定义

  • 使用了 static final 修饰的成员变量就被称为常量。

2、作用

  • 常用于记录系统的配置信息。
public class Constent {
    public static final String ARTICLE_NAME = "阿铭学java";
}

3、命名规范

  • 使用大写英文单词,多个单词使用下划线连接起来。

4、优势与原理

  • 代码可读性更好,可维护性也更好。
  • 程序编译后,常量会被“宏替换”:出现常量的地方全部会被替换成其记住的字面量,这样可以保证使用常量和直接用字面量的性能是一样的。

单例类(设计模式)

定义

  • 一个问题通常有n种解法,其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。

单例设计模式

1、作用

  • 确保某个类只能创建一个对象。

2、单例类的多种形式

  • 饿汉式:在获取类的对象时,对象已经创建好了。
  • 懒汉式:要用类的对象时才创建对象(延迟加载对象) 。

3、写法与实现步骤(饿汉式单例)

  • a.把类的构造器私有。
  • b.定义一个静态变量记住类的一个对象。
  • c.定义一个静态方法,返回对象。
 // 单例类
public class A {
    // 2、定义一个静态变量记住类的一个对象
    private static A a = new A();
    // 1、私有构造器
    private A(){
    }
    // 3、定义一个静态方法返回对象
    public static A getObject(){
        return a;
    }
}

4、写法与实现步骤(懒汉式单例)

  • 把类的构造器私有。
  • 定义一个静态变量用于存储对象。
  • 提供一个静态方法,保证返回的是同一个对象。
public class B {
    // 2、定义一个类变量量用于存储对象
    private static B b ; // null
    // 1、单例必须私有构造器
    private B(){
    }
    // 3、提供一个类方法返回类的一个对象
    public static B getObject(){
        if(b == null){
            b = new B();
        }
        return b;
    }
}

枚举类

定义

  • 枚举是一种特殊类。

写法

修饰符 enum 枚举类名{
    名称1 ,  名称2, ... ; 
       其他成员…
}

public enum A{
    X , Y , Z;
    ...
}

特点

public enum A{
    X , Y , Z;
}

Compiled from “A.java"
    public final class A extends java.lang.Enum<A> {
        public static final A X = new A();
        public static final A Y = new A();
        public static final A Z = new A();
        public static A[] values();
        public static A valueOf(java.lang.String);
}
  • 枚举都是最终类,不可以被继承,枚举类都是继承java.lang.Enum类的。
  • 枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量会记住枚举类的一个对象。
  • 枚举类的构造器都是私有的(写不写都只能是私有的),因此,枚举类对外不能创建对象。
  • 编译器为枚举类新增了几个方法。

应用场景

  • 枚举类很适合做信息分类和标志。

抽象类

定义

  • 在Java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类、成员方法。
  • abstract修饰类,这个类就是抽象类。
  • abstract修饰方法,这个方法就是抽象方法。
修饰符 abstract class 类名{ 
    修饰符 abstract 返回值类型 方法名称(形参列表)
 }
public abstract class A {
    // 抽象方法:必须abstract修饰,只有方法签名,不能有方法体
    public abstract void test();
}

注意事项及特点

  • 抽象类中不一定要有抽象方法,有抽象方法的类必须是抽象类
  • 类有的成员:成员变量、方法、构造器,抽象类都可以有。
  • 抽象类最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现
  • 一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。

好处

  • 父类知道每个子类都要做某个行为,但每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去重写实现,我们设计这样的抽象类,就是为了更好的支持多态

模板方法设计模式

1、定义

  • 提供一个方法作为完成某类功能的模板,模板方法封装了每个实现步骤,但允许子类提供特定步骤的实现。

2、好处

  • 提高代码的复用、并简化子类设计。

3、写法

  • 1、定义一个抽象类。
  • 2、在里面定义2个方法
  • 一个是模板方法:把共同的实现步骤放里面去。
  • 一个是抽象方法:不确定的实现步骤,交给具体的子类来完成。

4、建议

  • 建议使用final关键字修饰模板方法:
  • 模板方法是给子类直接使用的,不能被子类重写。
  • 一旦子类重写了模板方法,模板方法就失效了。

接口

概述

  • Java提供了一个关键字interface定义出接口。
public interface 接口名 {
    // 成员变量(常量)
    // 成员方法(抽象方法)
} 
  • 接口不能创建对象。
  • 接口是用来被类实现(implements)的,实现接口的类称为实现类,一个类可以同时实现多个接口。
修饰符 class 实现类类名 implements 接口1, 接口2, 接口3 , ... {
    //实现类实现多个接口,必须重写完全部接口的全部抽象方法,否则实现类需要定义成抽象类。
} 

好处

  • 弥补了类单继承的不足,一个类同时可以实现多个接口,使类的角色更多,功能更强大。
  • 让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务实现(更利于程序的解耦合)。

新增方法

  • JDK 8开始,接口新增了三种形式的方法。
  • 增强了接口的能力,更便于项目的扩展和维护。
public interface A{
    /**
    * 1、默认方法(实例方法):使用用default修饰,默认会被加上public修饰。
    * 注意:只能使用接口的实现类对象调用
    */
    default void test1(){
        ...
        }
    /**
    * 2、私有方法:必须用private修饰(JDK 9开始才支持)
    */
    private void test2(){
        ...
        }
    /**
    * 3、类方法(静态方法):使用static修饰,默认会被加上public修饰。
    * 注意:只能用接口名来调用。
    */
    static void test3(){
        ...
        }
}

注意事项

  • 1、接口与接口可以多继承:一个接口可以同时继承多个接口[重点]。
  • 2、一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承,也不支持多实现。
  • 3、一个类继承了父类,又同时实现了接口,如果父类中和接口中有同名的默认方法,实现类会优先用父类的。
  • 4、一个类实现了多个接口,如果多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。

方法签名

  • 方法签名由方法名+形参列表构成。
相关文章
|
16小时前
|
Java
Java基础学习day06-作业
本内容为Java基础学习作业,涵盖两个案例:一是通过Card类及其子类GoldenCard、SilverCard实现加油卡系统,体现封装与继承;二是通过Shape类及子类Circle、Rectangle演示多态与方法重写,强化面向对象编程理解。
15 1
|
16小时前
|
Java
Java基础学习day07-作业
本作业包含六个Java编程案例:1)动物类继承与多态;2)加油卡支付系统;3)员工管理类设计;4)学生信息统计接口;5)USB设备控制;6)家电智能控制。综合运用抽象类、接口、继承、多态等面向对象技术,强化Java基础编程能力。
17 3
|
14天前
|
人工智能 数据可视化 定位技术
不会编程也能体验的 AI 魔法,外滩大会代码原生地等你解锁
不会编程也能体验的 AI 魔法,外滩大会代码原生地等你解锁
218 25
|
14天前
|
XML 前端开发 决策智能
多智能体自主规划模式性能提升:五大精准策略详解
本文基于生产环境中的多智能体 React 模式实践,系统剖析了自主规划架构在工具调用延迟、上下文膨胀、中间态缺失、循环失控与监督缺位等方面的典型挑战。
163 20
|
16小时前
|
Java 程序员
Java基础学习day08
本节讲解Java中的代码块(静态与实例)及其作用,深入介绍内部类(成员、静态、局部及匿名)的定义与使用,并引入函数式编程思想,重点阐述Lambda表达式及其在简化匿名内部类中的应用。
21 5
|
14天前
|
存储 关系型数据库 分布式数据库
分布式事务:共识之外,分布式系统状态管理的另一大基石
本文深入探讨了分布式系统中“共识”与“事务”两大核心技术的本质区别与协同关系。
160 20
|
16小时前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
68 26
|
16小时前
|
Java 数据库连接 应用服务中间件
基于springboot的母婴健康交流系统
本平台旨在为新手父母提供专业、系统的婴幼儿健康知识与交流空间,整合权威资源,解决育儿信息碎片化与误导问题,支持经验分享与情感互助,助力科学育儿。
|
15天前
|
人工智能 运维 Java
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
本文基于Apache Flink PMC成员宋辛童在Community Over Code Asia 2025的演讲,深入解析Flink Agents项目的技术背景、架构设计与应用场景。该项目聚焦事件驱动型AI智能体,结合Flink的实时处理能力,推动AI在工业场景中的工程化落地,涵盖智能运维、直播分析等典型应用,展现其在AI发展第四层次——智能体AI中的重要意义。
216 19
Flink Agents:基于Apache Flink的事件驱动AI智能体框架

热门文章

最新文章