Java中可以把类定义成局部变量,有什么实际意义吗?

今天笔试遇到的试题,一下子把我打得措手不及。
想问下大神,这种有没有实际运用场景的。

public class Test {
    
       public int test() {
           // 把类C定义成局部变量
        class C{
            public int num = 1;
        }
        C c = new C();
        return c.num;
    }
    
    public static void main(String[] args) {
        
        // 把类B定义成局部变量
        class B {
            public int n = 3;
        }
        Object o = (Object) new B();
        B b = (B) o;
        System.out.println(b.n);
        
        System.out.println(new Test().test());
    }
}
阅读 5.2k
6 个回答

在方法中有两种方式定义类:

   public void myMethod()
    {
        // 匿名内部类
        Runnable r = new Runnable() {
            public void run() {}
        };

        // 局部内部类
        class LocalClass implements Runnable
        {
            public void run() {}
        }
    }

题主说的就是局部内部类,在使用上和匿名内部类效果上是一样的,我想大多数人更倾向于使用匿名内部类。它们有如下特点:

  • 能访问方法中的final变量

  • 外部包括本类中的其他方法都是不可见的

实际开发中最常见的使用方式,就是实现Runnable了。

延迟初始化占位类,Java Concurrency in Practice有讲。主要作用就是延迟初始化+安全发布。

延迟初始化+安全

实际应用中,可以用作json解析么。

这是内部类吧……前几楼的说法不太懂

随便百度的内部类详解

题主的栗子在这个详解中是第4点,方法内的内部类,最下面也有说为什么要用内部类

  1. 内部类方便私有化,安全,而且使外部代码简洁。

  2. 内部类是面向对象的闭包

  3. 私有静态内部类, 只有当有引用时, 该类才会被装载,就是上面说的延迟加载啦。。。

推荐问题