素材牛VIP会员
Java中可以把类定义成局部变量,有什么实际意义吗?
 钢***侠  分类:Java代码  人气:1393  回帖:12  发布于6年前 收藏

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

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());
    }
}
 标签:java

讨论这个帖子(12)垃圾回帖将一律封号处理……

Lv3 码奴
lo***ng PHP开发工程师 6年前#1

延迟初始化+安全

Lv4 码徒
风***0 JS工程师 6年前#2

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

Lv6 码匠
阿***6 Linux系统工程师 6年前#3

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

Lv1 新人
wx***73 移动开发工程师 6年前#4

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

随便百度的内部类详解

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

Lv6 码匠
qi***un 技术总监 6年前#5

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

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

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

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

  • 能访问方法中的final变量

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

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

wx***35:很好
Lv5 码农
陌***3 PHP开发工程师 6年前#6
  1. 内部类方便私有化,安全,而且使外部代码简洁。

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

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

Lv1 新人
qw***32 职业无 5年前#7

内部类主要还是安全性

Lv1 新人
qq***93 职业无 2年前#8
外部类的资源内部类随便访问,内部类的资源外部类通过创建内部类对象访问,当内部类设置了访问权限,其他类不一定能访问到内部类的资源,因为不一定能通过外部类创建内部类的对象
Lv1 新人
qq***70 职业无 1年前#9
我是小白
Lv1 新人
qq***28 职业无 1年前#10
学习中
上一页12下一页
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取