黑马程序员技术交流社区

标题: 关于静态内部类的加载问题 [打印本页]

作者: 李新辉    时间: 2013-10-30 15:23
标题: 关于静态内部类的加载问题
本帖最后由 李新辉 于 2013-10-31 21:35 编辑

class Outer
{
    private static int x = 3;
    static class Inner
    {
        static void function()
        {
            System.out.println("Inner:"+x);
        }
    }
}
----------------------------------------------------------------
class Outer
{
    private static int x = 3;
    static class Inner
    {
        void function()
        {
            System.out.println("Inner:"+x);
        }
    }
}

静态会随着类的加载而加载
第一段代码:
随着外部类Outer的加载而加载的是静态内部类 Inner这个整体吗?
第二段代码
那么静态内部类 Inner内部定义了非静态的函数 function(),那么又是怎样的加载形式呢?
在外部类加载的时候它在内存的那片区域呢?
很迷惑


作者: 李新辉    时间: 2013-10-30 15:29
没人回复吗?
作者: 喂,咱不离!    时间: 2013-10-30 20:17
你想,成员内部类的作用是不是相当于一个成员变量或是方法吧,那么它在内存中的加载方式肯定是和成员的加载方式是一样的,现有对象,后又成员;至于静态内部类而言,是不是相当于一个静态的成员啊,静态成员是怎么加载的,静态内部类就是怎么加载的,好,静态内部类加载了,再来看,其里面的方法,其实你把它就当一个正常的类看待就想了,静态成员是不是随着类的加载而加载,非静态的呢?那显然是得有对象呢吧!这不就是正常类的加载吗,只不过是外面套了一层皮,要想看到里面的东西,是不是是得一层层的把它拨开,拨开的方法都是一致的,在内存中的位置就看是静态、还是非静态了。
那么好了,有了上面这些共识之后,再来看待上面两个例子中的如何调用Inner的方法了。不管哪一个,调用方法,必须得有对象或是类的引用吧。
第一例,因为内部类和内部类中的方法都是静态的,所以调用简单多了,直接类名.xxx就可以了,所以是Outer.Inner.function();当然也可以创建对象,但那样显得没意思,也不专业~
第二例,内部类是静态的,那么我可以类名点调用了吧,但是内部类中的方法是非静态的,所以必须的创建内部类的对象才可以调用其里面的非静态方法吧,所以,创建对象就来了
Outer.Inner oi = new Outer.Inner();
oi.function();
其实你也可以从调用方法的方式上看出其在内存中是如何加载的。

。。。。。。。。。。。。。
好吧好吧,写了太多了,希望对楼主有用,没把楼主带到沟里去,哈哈~

作者: 李新辉    时间: 2013-10-30 21:50
喂,咱不离! 发表于 2013-10-30 20:17
你想,成员内部类的作用是不是相当于一个成员变量或是方法吧,那么它在内存中的加载方式肯定是和成员的加载 ...

对象是来封装数据的
静态随类的加载而加载
非静态成员只有被封装在对象里面才能被调用

不过静态内部类中的非静态成员被加载到了内存的那一片区域了呢?
这个我还是不理解的
作为静态内部类的内容的非静态函数,他难道被加载到了方法区的非静态区了吗?
作者: 黄炳期    时间: 2013-10-30 21:51
不知道楼上的回答满意不?
作者: 李新辉    时间: 2013-10-31 21:33
黄炳期 发表于 2013-10-30 21:51
不知道楼上的回答满意不?

昨晚  电脑中标了    搞到大半夜  
现在才整好……
烦……
作者: 李新辉    时间: 2013-10-31 21:34
静态与与非静态   应该就是一个先加载和后加载的问题
还有就是随着谁执行

也就是对象初始化过程中的调用问题
我想我这样理解比较合适

不管在哪一片内存l了,没人有高见
以后慢慢琢磨吧……
我明白了调用的问题  就O了…………
作者: 黄炳期    时间: 2013-10-31 22:40
李新辉 发表于 2013-10-31 21:33
昨晚  电脑中标了    搞到大半夜  
现在才整好……
烦……

崩溃了?
现在在学习,电脑出问题的话很麻烦~~~
作者: 李新辉    时间: 2013-10-31 22:56
黄炳期 发表于 2013-10-31 22:40
崩溃了?
现在在学习,电脑出问题的话很麻烦~~~

可能是中毒了吧
然后我误删了系统文件,上不去网了
替换文件  搞定了
没事了现在……
:)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2