静态内部类.md

嵌套类

  1. 定义
    嵌套类(Nested class)是指定义在另一个类的内部类。
  2. 作用
    用于为他的外围类提供服务。
  3. 分类
    嵌套类可以分为四种,静态成员类static number class、非静态成员类nostatic number class、匿名类 anonymous class、局部类 local class

静态类

静态类是最常用的内部类,可以看成普通类,只是凑巧在另外一个声明类里

  • 静态类可以访问外围类的所有变量和方法,包括私有成员。同样,如果静态类声明为私有类,也只能被本外围类访问。
    1. 作用
      常见共有类的辅助类,仅当与他的外部类一同使用,才能起作用(非静态类,只有与外围实例,才起作用)。例如,Calcuator.Operation.PULSCalcuator.Operation.MINUS
    2. 作用方式
      可以独立与外围类,不需要外围类提供实例。同样,在没有外围实例情况下,也无法创建非静态类

非静态类

  1. 注意
    之所以优先考虑静态类,是因为非静态类,每一个实例都会包含一个额外的指向外围对象的引用,消耗时间和空间,同时导致外围实例在可以回收时被保留。

匿名类

1.注意
- 匿名类并不在其他成员一同声明,仅在被使用时候,声明和实例化。
- 仅当匿名类同时出现在非静态环境时,才有外围实例。
2. 用法
- 动态地创建函数对象

总结

如果一个嵌套类需要在单个方法外仍然可见(可以单独使用方法),或者太长,应该考虑使用成员类。
- 如果成员类的每个实例都需要一个指向其外围实例的引用,使用非静态,否则设为静态类。
- 如果嵌套属于方法内部,或者只需要在一个地方使用实例,构造匿名类,否则局部类。
- Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。

静态/非静态类的调用格式

public class Enclosingone {
    //非静态内部类
    public class InsideOne {}
    //静态内部类
    public static class InsideTwo{}
}

class Mytest02{
    public static void main(String args []){
        Enclosingone.InsideOne obj1 = new Enclosingone().new InsideOne();//非静态内部类对象
        Enclosingone.InsideTwo obj2 = new Enclosingone.InsideTwo();//静态内部类对象
    }
}
来源: https://www.nowcoder.com/test/question/done?tid=7018078&qid=7673#summary
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值