日期:2014-05-20  浏览次数:20787 次

刚刚和舍友讨论了一个问题 觉得挺纠结
Java code

public class Houst {
        public void a(){
        final int d=1;
             class b{
                 class c{
                 }
        }
}


以上的代码是从教科书上找的,这是一个a()方法,里面嵌套了一个类b 。这个方法没法被主方法调用。
我认为一个方法既然没法被主方法调用,那么这个方法就是一个失败的方法,因此这段代码毫无意义。
我舍友则认为它是有一定的用的,只不过他也不知道怎么用。

所以我来请教各位,如果各位觉得这段代码毫无用处,那么我就不去研究它能干什么了。
如果有用,还请各位耐心指教。

------解决方案--------------------
这个方法本身是public,也就意味着可以被第三方类(或者说程序吧)调用,为啥能定论这个方法一定是没用的?
------解决方案--------------------
当然有用,参考下面代码。

Java code

public class Houst {
    
    public static void main(String[] args) {
        Houst h = new Houst();
        h.a();
    }
    
    public void a() {
        System.out.println("a");
        final int d = 1;
        class b {
            public void d() {
                System.out.println("d");
            }
            class c {
            }
        }
        b bb = new b(); 
        bb.d(); // 调用类b的的方法d()
    }
}

------解决方案--------------------
public class T {
public void a(){
final int d = 1; //去掉final 内部类 中使用会报错
class A{ //内部类,写在方法里,其作用域,就只能在这个方法里,不能在方法外面创建
public void a(){
System.out.println("我是A类" + d);
}
class B{//作用: 为了实现特定的一个功能,防止被其他类使用(个人理解) 
public void b(){
System.out.println("我是B类" + d);
}
}
}
new A().a(); //调用方式
new A().new B().b(); 

}

public static void main(String[] args){
new T().a();
}
}
------解决方案--------------------
先说楼主的问题:这是一个a()方法,里面嵌套了一个类b 。这个方法没法被主方法调用,你说的主方法是指main方法,不能new一个对象出来吧?
main方法是静态方法。所以你直接new是出不来,因为你首先要有a一个实例产生,内部的类才能开始使用,我说是才能使用,没说一定能使用。
如果在class a中的动态方法中是可以new 一个内部类出来,并且使用的。因为动态方法使用前,必须要有a这么一个实例。才能使用动态方法。涉及到类加载问题。
其次:其实这问题偶尔也容易方法,有的时候莫名其秒的报错,你只要注意是静态方法还是动态的就可以了,至于要不要研究,还真没什么必要