【问题标题】:Class Inside Method类内部方法
【发布时间】:2014-03-25 07:59:36
【问题描述】:
public class Demo 
{

    public void met(Object d)
    {

        class my {
            public String Work(String s){
                return s+",JAVA";
            }
        }
        d=new my().Work("Hello");//statement 1
        System.out.println(d);//statement 2

    }

    public static void main(String args[])
    {
        new Demo().met(new Object());
    }

}

我不知道以前是否有人问过。在这个班级Demo 我正在创建班级my

当我将语句 1 和 2 放在课前时,它会给我错误,但当我放在课后时,没关系。

所以这意味着当我调用方法时,会加载类并创建名为 Demo$1my.class 的类文件,这样如果我将语句 1 和 2 放在类之后它就可以工作。是这样吗?

我的问题是我可以从 main 方法创建 my 类的对象吗?

【问题讨论】:

标签: java


【解决方案1】:

我可以从 main 方法创建我的类的对象吗?

没有。只有met 方法知道该类的任何信息。如果您想在该方法之外使用该类,则应将其声明为Demo 内的嵌套类,或作为完全独立的非嵌套类。

就我个人而言,我会尽量避免嵌套类——它们有奇怪的限制,你经常会因为不小心忘记static 修饰符而最终创建内部类而不是嵌套类,而且它们通常很痛苦。

【讨论】:

  • 为什么会有一个类inside一个方法?特别是当它不是 匿名..
  • @MarounMaroun:我记得一次准确地使用过它——当我想声明一个特定的异常时,然后在回调中使用它,然后捕获它特别的例外。
  • 我只是好奇,你为什么不在方法outside声明类呢?你能发布一个小例子吗?我真的很想知道什么时候有一个类inside一个方法更好。
  • @MarounMaroun:基本上,我不想让任何其他代码知道这个类。没有理由任何其他班级需要了解该班级。
猜你喜欢
  • 1970-01-01
  • 2010-09-09
  • 2015-06-19
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 2020-03-05
相关资源
最近更新 更多