Java中可以把类定义成局部变量,有什么实际意义吗?
大家讲道理
大家讲道理 2017-04-17 15:25:05
[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());
    }
}
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(6)
PHP中文网

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

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

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

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

  • 能访问方法中的final变量

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

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

大家讲道理

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

大家讲道理

延迟初始化+安全

阿神

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

PHPz

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

随便百度的内部类详解

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

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

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号