static

面向对象进阶

static

static 成员变量和实例成员变量的内存原理

当类被加载到方法区时,static成员变量被初始化,保存在堆内存的静态变量区。但这时还没有值。
在这里插入图片描述
在对象创建之后,实例成员变量初始化,并且保存在堆内存的对象中。
在这里插入图片描述

static 方法和实例方法的内存保存原理

static 方法在类加载到方法区时,就一起加载进来了。并且保存在方法区。
在这里插入图片描述
创建实例后,才加载,保存在方法区。
在这里插入图片描述

最佳实践:什么时候使用静态成员方法,什么时候使用实例方法

  • 表示对象自己的行为的,且方法中需要访问实例成员的,则该方法必须申明成实例方法
  • 如果该方法是以执行一个共用功能为目的,则可以申明成静态方法

最佳实践:工具类实现时需要注意什么

  • 类中都是一些静态方法,每个方法都是以完成一个共用的功能为目的,直接用类名即可访问
  • 工具类无需创建对象,建议将工具类的构造器进行私有

最佳实践:什么时候使用 static 代码块

在启动系统时对静态资源进行初始化,则建议使用静态代码块完成数据的初始化操作。
比如斗地主游戏,在启动游戏房间的时候,应该提前准备好54张牌,后续才可以直接使用这些牌数据。当系统启动的同时需要准备好54张牌数据,此时可以用静态代码块完成。

单例模式中,饿汉单例模式如何实现

  • 定义一个类,把构造器私有
  • 定义一个静态变量存储一个对象
    在这里插入图片描述

单例模式中,懒汉单例设计模式如何实现

  • 在真正需要该对象的时候,才去创建一个对象
  • 定义一个类,把构造器私有
  • 定义一个静态变量存储一个对象
  • 提供一个返回单例对象的方法
    在这里插入图片描述

饿汉单例模式和懒汉单例设计模式,实现上有什么不同

饿汉单例模式,初始化类时就给单例赋值,调用时直接返回。
懒汉单例模式,初始化类时不给单例赋值,调用时再赋值、返回。

子类可以继承父类的什么,而不能继承什么

基本上都可以继承,注意

  • 不能继承父类的构造器,只会在自身构造器的第一行隐式地调用父类构造器,父类构造器用于初始化父类对象
  • 子类可以继承父类的私有成员,但是无法访问
    在这里插入图片描述
  • 子类是否继承父类的静态成员有争议,但可以直接使用父类的静态成员

最佳实践:重写

  • 方法前加@Override注解,可以校验重写是否正确,同时可读性好
  • 重写方法的名称、形参列表必须与被重写方法的名称和参数列表一致
  • 私有方法和静态方法不能被重写
  • 重写时,子类的访问权限必须大于等于父类

常见错误:父类中没有无参数构造器,只有有参构造器,实例化子类对象时会出现什么现象

会报错。因为子类构造器第一行会默认调用父类无参构造器。
子类构造器中可以通过书写 super(…),手动调用父类的有参数构造器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值