0
点赞
收藏
分享

微信扫一扫

00014.02 静态内部类和非静态内部类


文章目录

  • ​​一、 静态内部类​​
  • ​​二、非静态内部类​​
  • ​​总结​​

一、 静态内部类

1、特点

(1)静态内部类中可以出现原本类中能改定义的所有成员

我们回顾一下有哪些成员

属性,可以有静态属性和非静态属性

方法,可以有静态方法和非静态方法

构造器,可以有有参和无参构造器

代码块:可以有静态代码块和非静态代码块

内部类:有静态内部类和非静态内部类,并且允许在内部类里面再写内部类,但是我们不讨论内部类的内部类,这里跳过,没必要搞复杂

(2)静态内部类中不能使用外部类的非静态的成员

00014.02 静态内部类和非静态内部类_外部类


(3)在外部类中,使用静态内部类,和使用其他的类一样的原则,

如果使用静态内部类的静态成员,直接“静态内部类名.”

如果使用静态内部类的非静态成员,直接“静态内部类对象名.”(4)在外部类的外面,使用静态内部类

如果使用静态内部类的静态成员,直接“类名.”

使用外部类名.静态内部类名.静态方法

使用import 包.外部类名.静态内部类名; 在代码中使用 “静态内部类名.”

00014.02 静态内部类和非静态内部类_非静态_02

如果使用静态内部类的非静态成员,“静态内部类对象名.”

(5)静态内部类不会随着外部类的初始化一起初始化,而是要在使用到这个静态内部类是才会初始化

看下面这段代码,并没有调用出内部类

00014.02 静态内部类和非静态内部类_非静态_03

二、非静态内部类

非静态内部类 是有一些特殊的

00014.02 静态内部类和非静态内部类_内部类_04


1、特点

(1)在非静态内部类中,不能出现任何static有关的声明

(2)在非静态内部类中可以随意访问外部类的所有成员,包括静态的和非静态的

(3)在外部类的静态成员中,不能使用非静态的成员内部类

00014.02 静态内部类和非静态内部类_非静态_05


00014.02 静态内部类和非静态内部类_非静态_06


如上代码 违反了 “静态方法不能访问非静态的成员” 这个原则

(4)在外部类的外面使用

第一步:先创建外部类的对象

第二步:要么通过外部类对象去创建内部类的对象

要么通过外部类的对象去获取内部类的对象

00014.02 静态内部类和非静态内部类_内部类_07

00014.02 静态内部类和非静态内部类_内部类_08


new一个 非静态成员 需要new 一个对象

00014.02 静态内部类和非静态内部类_内部类_09


但是实际开发中,一般会去避免程序员写这种代码,因为有点反人类

那么怎么避免呢?

00014.02 静态内部类和非静态内部类_外部类_10


00014.02 静态内部类和非静态内部类_外部类_11


后面我们讲的迭代器那些都是这样,通过方法创建对象

00014.02 静态内部类和非静态内部类_内部类_12

总结

(1)同级的来说静态的不能直接使用非静态的
(2)访问一个类的静态成员,用“类名.”即可,
访问一个类的非静态成员,用“对象名.”即可,
(3)一个类需要初始化,得用到这个类


举报

相关推荐

0 条评论