当前位置: 首页 > news >正文

Java基础第5天总结(final关键字,枚举,抽象类)

  • final 修饰类:该类被称为最终类,特点是不能被继承了。
  • final 修饰方法:该方法被称为最终方法,特点是不能被重写了。
  • final 修饰变量:该变量有且仅能被赋值一次。
  • final 修饰基本类型的变量,变量存储的数据不能被改变。
  • final 修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象的内容是可以被改变的。
  • 使用了static final 修饰的成员变量就被称为常量。作用:常用语记录系统的配置信息。


  • 单例设计模式
  • 作用:确保某个类只能创建一个对象。
  • 写法,实现步骤(饿汉式单例):
  1. 把类的构造器私有。
  2. 定义一个类变量记住类的一个对象。
  3. 定义一个方法,返回对象。
package com.itheima.singleinstance;
//设计成单例设计模式(饿汉)
public class A {//2、定义一个静态变量,用于记住本类的一个唯一对象//public static final A a = new A();//用这种就不用写第三步了private static A a = new A();//1、私有化构造器,确保单例类对外不能创建太多对象private A(){}//3、提供一个公开的静态方法,返回这个类的唯一对象public static A getInstance(){return a;}
}
package com.itheima.singleinstance;public class Test {public static void main(String[] args) {A a1 = A.getInstance();//A a2 = A.a;用final就这么定义}
}
  • 写法,实现步骤(懒汉式单例):
  1. 把类的构造器私有
  2. 定义一个静态变量用于存储对象
  3. 提供一个静态方法,保证返回的是同一个对象
package com.itheima.singleinstance;
//懒汉式单例类
public class A {//2、私有化静态变量private static A a;//1、私有化构造器private A(){}//3、提供静态方法返回对象,用的时候才创建对象public static A getInstance(){if(a == null){a = new A();}return a;}
}
package com.itheima.singleinstance;public class Test {public static void main(String[] args) {A a1 = A.getInstance();A a2 = A.getInstance();System.out.println(a1 == a2);// true}
}


  • 枚举类
  1. 都是最终类,不可以被继承,枚举类都是继承java.lang.Enum类的。
  2. 枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量会记住枚举类的一个对象。
  3. 枚举类的构造器都是私有的,因此,枚举类对外不能创建对象。
package com.itheima.enumdemo;
//枚举类
public enum  A {//枚举类的第一行:只能罗列枚举对象的名称,这些名称本质是常量X,Y,Z;
}
package com.itheima.enumdemo;public class Test {public static void main(String[] args) {A a1 = A.X;System.out.println(a1);// XSystem.out.println(a1.name());// XSystem.out.println(a1.ordinal());//索引 输出0}
}
  • 枚举类很适合做信息分类和标志。
package com.itheima.enumdemo;public class Constant {public static final int UP = 0;public static final int DOWN = 1;public static final int LEFT = 2;public static final int RIGHT = 3;
}
package com.itheima.enumdemo;public enum Direction {UP, DOWN, LEFT, RIGHT;
}
package com.itheima.enumdemo;public class Test {public static void main(String[] args) {//枚举类的应用场景:做信息的分类和标志//需求:模拟上下左右移动//法一:常量做信息标志和分类:但是参数值不受约束(除了0,1,2,3还能输入其他值)。move(Constant.UP);//法二:枚举做信息标志和分类:参数值受枚举类约束(只能输入这几个)。move2(Direction.UP);}public static void move2(Direction direction){switch (direction)//就这几种情况,不需要default判断了{case UP:System.out.println("向上移动");break;case DOWN:System.out.println("向下移动");break;case LEFT:System.out.println("向左移动");break;case RIGHT:System.out.println("向右移动");break;}}public static void move(int direction){switch (direction){case Constant.UP:System.out.println("向上移动");break;case Constant.DOWN:System.out.println("向下移动");break;case Constant.LEFT:System.out.println("向左移动");break;case Constant.RIGHT:System.out.println("向右移动");break;default:System.out.println("无效的移动方向");}}
}


  • 抽象类、抽象方法:都是用abstract修饰的;抽象方法只有方法签名,不能写方法体(不写大括号和大括号里的东西)
  • 抽象类中可以不写抽象方法,但有抽象方法的类必须是抽象类
  • 类有的成员(成员变量,方法,构造器)抽象类都具备
  • 抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现
  • 一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类
  • 父类知道每个子类都要做某个行为,但每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去重写,我们抽出这样的抽象类,就是为了更好的支持多态。
package com.itheima.abstractdemo;public abstract class Animal {public abstract void cry();
}
package com.itheima.abstractdemo;public class Cat extends Animal{@Overridepublic void cry() {System.out.println("小猫喵喵叫");}
}
package com.itheima.abstractdemo;public class Dog extends  Animal{@Overridepublic void cry() {System.out.println("汪汪汪");}
}
package com.itheima.abstractdemo;public class Test {public static void main(String[] args) {Animal a1 = new Dog();a1.cry();Animal a2 = new Cat();a2.cry();}
}
  • 模板方法设计模式解决了方法中存在重复代码的问题。
  • 模版方法设计模式应该怎么写?
  1. 定义一个抽象类
  2. 在里面定义2个方法,一个是模板方法:放相同的代码,一个是抽象方法:具体实现交给子类完成
  • 模板方法建议使用final关键字修饰
package com.itheima.abstract1;public abstract class People {public final void write(){System.out.println("aaaaaaaaaaaaaaaa");writeMain();System.out.println("cccccccccccccccc");}public abstract void writeMain();
}
package com.itheima.abstract1;public class Teacher extends  People{@Overridepublic void writeMain() {System.out.println("老师写代码");}
}
package com.itheima.abstract1;public class Student extends  People{@Overridepublic void writeMain() {System.out.println("学生写代码");}
}
package com.itheima.abstract1;public class Test {public static void main(String[] args) {People s1 = new Student();s1.write();System.out.println("==========================");People t1 = new Teacher();t1.write();}
}
/*
输出结果:
aaaaaaaaaaaaaaaa
学生写代码
cccccccccccccccc
==========================
aaaaaaaaaaaaaaaa
老师写代码
cccccccccccccccc*/


http://www.xdnf.cn/news/1371277.html

相关文章:

  • CVPR自适应卷积的高效实现:小核大感受野提升复杂场景下图像重建精度
  • vue新增用户密码框自动将当前用户的密码自动填充的问题
  • 高校党建系统设计与实现(代码+数据库+LW)
  • 嵌入式配置数据序列化:自定义 TLV vs nanopb
  • 深度学习篇---LeNet-5
  • 1Panel命令
  • 100种交易系统(6)均线MA识别信号与杂音
  • 深度学习----由手写数字识别案例来认识PyTorch框架
  • Python实现RANSAC进行点云直线、平面、曲面、圆、球体和圆柱拟合
  • Il2CppInspector 工具linux编译使用
  • 设计模式之命令模式
  • Vuex 和 Pinia 各自的优点
  • Linux之SELinux 概述、SSH 密钥登录、服务器初始化
  • 利用AI进行ArcGISPro进行数据库的相关处理?
  • Java数据结构速成【1】
  • 原则性 单一职责原则,第一性原则和ACID原则 : 安全/学习/节约
  • 从双重检查锁定的设计意图、锁的作用、第一次检查提升性能的原理三个角度,详细拆解单例模式的逻辑
  • Markdown学习笔记(4)
  • 矩阵微积分的链式法则(chain rule)
  • 在 Android Studio 中修改 APK 启动图标(2025826)
  • 从线到机:AI 与多模态交互如何重塑 B 端与 App 界面设计
  • 【RAGFlow代码详解-23】聊天系统架构
  • 【LeetCode 热题 100】75. 颜色分类——双指针
  • PWM控制实现呼吸灯
  • 家庭财务规划与投资系统的设计与实现(代码+数据库+LW)
  • Linux SSH 基于密钥交换的自动登录:原理与配置指南
  • (Arxiv-2024)VideoMaker:零样本定制化视频生成,依托于视频扩散模型的内在力量
  • 进程管理详解
  • 如何将视频从安卓设备传输到Mac?
  • 2025改版:npm 新淘宝镜像域名地址