千家信息网

Java的单例模式与final及抽象类和接口实例分析

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,这篇文章主要介绍"Java的单例模式与final及抽象类和接口实例分析"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Java的单例模式与final及抽象类和接
千家信息网最后更新 2024年11月18日Java的单例模式与final及抽象类和接口实例分析

这篇文章主要介绍"Java的单例模式与final及抽象类和接口实例分析"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Java的单例模式与final及抽象类和接口实例分析"文章能帮助大家解决问题。

1.单例模式

1.饿汉式和懒汉式的实现

步骤:

  • 将构造器私有化

  • 类的内部创建对象

  • 向外暴露一个静态的公共方法

2.饿汉式

class School1 {    //饿汉式    private String name;    //在类的内部直接创建对象    private static School1 sc = new School1("清华大学");    //将构造器私有化    private School1(String name) {        this.name = name;    }    //提供一个公共的static方法返回对象    public static School getInstance() {        return sc;    }}

3.懒汉式

class School2 {    //懒汉式    private String name;    //在类的内部直接创建对象    private static School2 sc;    //将构造器私有化    private School2(String name) {        this.name = name;    }    //提供一个公共的static方法返回对象    //若对象为null创建对象否则直接返回对象    public static School2 getInstance() {        if (sc == null) {            sc = new School2("清华大学");        }        return sc;    }}

4.懒汉式和饿汉式的区别

  • 创建对象的时机不同:饿汉式在类加载是就创建了对象,懒汉式是在使用时再创建。

  • 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。

  • 饿汉式在类加载是就创建了对象所以存在资源浪费的问题,但懒汉式就不存在这个问题。

2.final的使用

1.基本介绍

final可以修饰类,属性,方法和局部变量。

2.使用场景

①当不希望父类被继承。

②当不希望父类的方法被子类重写。

③当不希望类的某个属性被修改

④当不希望某个局部变量被修改

final class A{};//当不希望父类被继承。class B{    public final void display(){};//当不希望父类的方法被子类重写。    public final int A_B = 10;//当不希望类的某个属性被修改    public void show(){        final int A_c = 20;//当不希望某个局部变量被修改    }}

3.使用注意事项和细节讨论

1.final修饰的属性又叫常量,一般用 XX_XX

2.final修饰的属性定义时,必须在以下位置赋初值

①定义时直接赋值。

②在构造器中赋值。

③在代码块中赋值。(普通属性在普通代码块初始化,静态属性在静态代码块初始化)

class A {//  定义时直接赋值。    public final  int a = 10;//    {//        a = 10;//在代码块中赋值。//    }////    public A() {//        a = 10;//在构造器中赋值。//    }}

3.如果final修饰的属性是static,则初始化的为位置只能是

①定义时直接赋值。

②在静态代码块中赋值。

class A {//  定义时直接赋值。    public final static int a = 10;//    static {//        a = 10;//在静态代码块中赋值。//    }//    public A() {//   final修饰的属性是static,则初始化的为位置不能是构造器//        a = 10;//    }}

4.final类不能继承,但可以实例化对象。

5.final修饰的方法虽然不能重写,但可以被继承。

6.final不能修饰构造器。

7.final 和 static 搭配使用,不会导致类的加载,效率更高。

8.包装类(Integer,Double,Float,Boolean,String等都是final修饰的)

3.抽象类

1.基本介绍

用abstract关键字修饰的类叫抽象类,abstract还可以用来修饰一个方法,即抽象类。

abstract class A{       abstract void display();    //当一个类中有一个抽象方法,这个类也要定义为抽象类}

2.使用注意事项和细节讨论

1.抽象类不能被实例化。

2.抽象类可以没有abstract方法。

3.当一个类中有一个抽象方法,这个类也要定义为抽象类。

4.abstract只能修饰类和方法,不能修饰属性和其他。

5.抽象类可以有任意成员,但抽象方法不能有实现主体。

6.如果一个类继承了抽象类,则必须要实现抽象类的所有方法。

7.抽象方法不能用private,static,final来修饰,因为这些关键字与重写相违背

4.接口

1.基本介绍

interface 接口名{
//属性
//方法(可以为抽象方法,静态方法,默认方法)
//在JDk7.0之前接口的所有方法都为抽象方法
}
class 类名 implements 接口{
自己属性;
自己方法;
必须实现的接口的抽象方法;

}

public interface UsbInterface {    int a = 10;//实际上是public final static int a = 10;    void connect();    void close();//抽象方法    default public void display(){//默认方法        System.out.println("接口中的方法被调用~");    }    public static void show(){//静态方法        System.out.println("接口中的静态方法被调用~");    }}

2.注意事项和细节讨论

1.接口不能被实例化

2.接口中所有的方法时 public 方法,接口中抽象方法,可以不用 abstract 修饰

3.一个普通类实现接口。就必须将该接口的所有方法都实现,可以使用alt+enter来解决

4.抽象类去实现接口时,可以不实现接口的抽象方法。

5.当一个类实现了一个接口,这个类就可以调用接口中的所有属性和默认方法,但不能调用接口中的静态方法。

public class MySql implements UsbInterface{    @Override    public void connect() {        System.out.println("MySql被调用");        display();        System.out.println(a);    }    @Override    public void close() {        System.out.println("MySql被关闭");    }}

3.实现接口与继承的区别

1.继承是将父类的所有继承过来,子类天生就拥有父类的所有属性,实现接口就像是后天学习其他的没有的技能。

2.继承的价值主要在于:解决代码的复用性和可维护性。

3.接口的价值主要在于:设计规范。更加灵活。

4.继承是满足is-a的关系,接口只需满足like-a的关系。

5.接口在一定程度上实现了代码解耦。

4.接口与继承同时出现如何访问属性

public class Interface01 {}interface A{    int x = 10;}class B {    int x = 20;}class C extends B implements A{    public void display(){        System.out.println( A.x + "+" + super.x );    }    //接口的属性直接通过接口名访问,父类通过super访问    public static void main(String[] args) {        new C().display();    }}

5.接口的多态特性

1.多态参数

接口可以接受不同的对象,接口的引用也可以指向实现了接口的类的对象。

public class InterfaceDetails {    public static void main(String[] args) {        MySql mySql = new MySql();        Oracle oracle = new Oracle();        t(mySql);        t(oracle);       UsbInterface UIf = mySql;    }    public static void t(UsbInterface mb) {        mb.close();        mb.connect();    }}

2.多态数组

public interface UsbInterface {    void work();}public class Phone implements UsbInterface{    @Override    public void work() {        System.out.println("手机正在工作。。。");    }    public void call(){        System.out.println("手机正在打电话。。。");    }}public class Camera implements UsbInterface{    @Override    public void work() {        System.out.println("相机正在工作。。。");    }}
public class Interface02 {    public static void main(String[] args) {        UsbInterface[] uIF = new  UsbInterface[2];        Phone phone = new Phone();        Camera camera = new Camera();        uIF[0]= phone;        uIF[1]= camera;        for (int i = 0; i < 2; i++) {            uIF[i].work();            if(uIF[i] instanceof Phone){                ((Phone) uIF[i]).call();            }        }    }}

3.接口存在多态传递现象

interface AA{    void display();}interface BB extends AA{}class CC implements BB{    @Override    public void display() {    }}

关于"Java的单例模式与final及抽象类和接口实例分析"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

方法 接口 属性 对象 静态 代码 懒汉 构造器 实例 问题 模式 多态 实例分析 分析 不同 普通 事项 位置 变量 子类 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 邹平制造业软件开发价格 北京至臻互联网科技有限公司 网络安全经验交流会 当前主流软件开发工具及优缺点 网络安全大会主持词 u9数据库备份很大怎么解决 数字媒体和网络技术哪个女生多 软件开发方法主要有哪几种 软件开发质量保证体系文档 甘孜软件开发优化价格 收录报纸的数据库 苹果电脑无法启动h2数据库 ecshop 数据库备份 软件开发最多可以干到多少岁 电视显示服务器访问失败原因 数据库的层次模型什么样子 和平精英一般的服务器是多少 路由器ftp服务器 宝塔管理阿里云服务器 西语医学数据库是什么意思 魔兽数据库dk技能全览 数据库服务器购买 为啥java还要会数据库设计 服务器备份软件有哪些 吉林省未来已来互联网科技 永宁网络安全与信息化 网络安全知识星球壁纸 西安旌旗充电系统数据库密码 在线mysql数据库工程师 计算机专业网络安全本科好就业吗
0