java 嵌套调用_Java嵌套类的使用

嵌套类是指被定义在另一个类内部的类,它为外部类提供服务。嵌套类分四种:静态成员类、非静态成员类、匿名类和局部类。

一、静态成员类与非静态成员类的区别?在什么情况下可以用静态成员类?

我们知道在类的设计中,为了避免继承破坏封装性,组合优于继承。通过使用成员类来实现组合设计,需要足够了解它们的特性以及在何时使用。

从表面上看,静态成员类只是比非静态的成员类在声明上多出了修饰符static。尽管它们功能相似,但与实际上,非静态成员类的每个实例都隐含关联着一个外部类的实例。也就是说,非静态成员类不可能独立于它的外部类实例之外而独立存在。

公有静态成员类可作为辅助类,如Compass类中的枚举Dir:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.pngView Code

1 package com.mnid.innerclass;

2

3 public class Compass {

4 private Dir direction = Dir.SOUTH;

5

6 public static enum Dir {

7 EAST, SOUTH, WEST, NORTH;

8 }

9

10 public Dir directing() {

11 //Bulk of class omitted12 return direction;

13 }

14 }

使用私有的静态成员类常见方法是用来代表外围类所代表的对象的组件,如一个Map实例,它的内部都有一个Entry对象对应Map中的所有键-值对,但Entry本身不需要访问Map,因此可以使用私有静态成员类设计。

非静态成员类实例都额外的对外部类实例的引用会引起不必要的开销。如果成员类不需要访问外部类实例,就应该将其声明为static的。

二、匿名类的限制和使用以及局部类

匿名类在声明的同时就进行实例化。它不是外部类的成员,并且只有在非静态环境中才有外围实例引用。

匿名类的常见用法是动态创建函数对象:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.pngView Code

1 public String fetchShortest(String[] strArray) {

2

3 Arrays.sort(strArray, new Comparator() {

4

5 @Override

6 public int compare(String s1, String s2) {

7 return s1.length() - s2.length();

8 }

9 });

10 return strArray[0];

11 }

其他常见用法包括创建过程对象,如Runable、Thread;在静态工厂方法内部也经常用到。

局部类可以在任何声明局部变量的地方声明,其特性与其他三种嵌套类一样。

声明匿名类和局部类时需非常简短,以免影响可读性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值