Java面向对象static-设计模式单例-extends

本文介绍了Java中的static修饰符,包括它的作用、应用和访问规则。接着讨论了单例设计模式,解释了其确保类只有一个实例的原理,并对比了饿汉式和懒汉式的实现。同时,提到了线程安全问题和双检查锁(DCL)策略。此外,还概述了Java中的继承机制,包括方法重写和super关键字的使用。
摘要由CSDN通过智能技术生成

1.static :

static是什么

  • 修饰符 修饰变量 方法

表示方法

  • (推荐)类.类变量/类方法 可以用对象名.类方法/类变量

代码块

  • 代码块:静态代码块,实例代码块,(类中方法外,初始化) 局部代码块(限制变量的作用域)

细节

  • 静态只能访问静态

应用

  • 工具类 : 构造器私有化 需要用的方法静态化 (不用创建对象,节省内存空间 Arrays,Collections等)

2.设计模式-单例:

  • 设计模式:处理该种问题的最优解

  • 单例设计模式 :保证一个类只创建一个对象 用于任务管理器,等重要

单例的解释:

  • 一个静态变量随着类的消亡而消亡,如果该类自己创建一个静态成员对象,那么该静态成员对象随着该类的消亡而消亡,也就是该对象只能由该类生成,或者说该类只能创建该类

单例表示方法:

  • (饿汉/懒汉):

  • 饿汉有可能会浪费内存空间

  • 懒汉不会浪费内存空间

  • 1.构造器私有化

  • 2.创建一个类变量来存储该类的对象

  • 3. 提供一个访问该类变量的类方法

如何解决线程安全

  • 饿汉式单例 JVM 在底层就实现了 线程同步锁获得 满足线程安全

  • 懒汉式单例需要手动加锁 用synchronized修饰 会出现效率低下的问题

  • 懒汉式单例用dcl 更保险 Double Check Locking 双检查锁机制 新的关键字 volatile

public class MySingleton {
    //使用volatile关键字保其可见性
    volatile private static MySingleton instance = null;

    private MySingleton(){}

    public static MySingleton getInstance() {
        try {  
            if(instance != null){//懒汉式 

            }else{
                //创建实例之前可能会有一些准备性的耗时工作 
                Thread.sleep(300);
                synchronized (MySingleton.class) {
                    if(instance == null){//二次检查
                        instance = new MySingleton();
                    }
                }
            } 
        } catch (InterruptedException e) { 
            e.printStackTrace();
        }
        return instance;
    }
}

参考链接:https://blog.csdn.net/cselmu9/article/details/51366946?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%8D%95%E4%BE%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E5%AE%9E%E7%8E%B0%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-51366946.142^v73^wechat_v2,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187

3.extends

  • A extends B : 减少重复代码的编写,提高代码的复用性,提升开发效率,提高可维护性(通用)

  • 权限修饰符:private < 包私有 < protected < public

  • java中不支持多继承,支持多层继承

方法重写的注意点 :

  • 1.同名同参数 返回值类型(仅限引用类型满足,基本数据类型不满足,比如不能用int来接收long的类型 )小于等于父类的方法

2.子类访问权限必须大于等于该父类的权限(public > protected>包私有 )

3.私有方法,静态方法不能重写

总结:声明({}前的内容都是声明 权限修饰符,返回值类型,方法名,形参列表 )不变,重新实现

方法重写的应用:

  • 子类对自己继承的方法不满意的时候对父类方法进行重写(Object 的toString)

super 关键字

  • 子类构造器都会先调用父类的构造器,第一行代码默认会有一个super(),再调用自己的构造器,如果父类有无参构造器 默认是无参的构造器,如果父类没有无参构造器,super(...)需要手动写。

  • 目的:当创建对象时,父类的还是子类的成员变量都能进行初始化

  • 子类构造器可以通过调用父类构造器,把对象中包含父类这部分的数据先初始化赋值,再回来把对象里包含子类这部分的数据进行初始化赋值。

  • this() 和super() 共存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值