黑马程序员技术交流社区

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

作者: dengjia1778    时间: 2015-3-25 09:58
标题: 关于内部类加静态
class InnerClassDemo6 {
        +(static)class Inner{
                void show(){}
        }
        public void method(){
                this.new Inner().show();//可以
        }
        public static void main(String[] args) {//static不允许this
                This.new Inner().show();//错误,Inner类需要定义成static
        }
}
不太理解为什么Inner一定要定义成静态才能被This调用?
作者: 高光天    时间: 2015-3-25 11:21
静态会在方法区存在 是可以被外部类对象(this)调用的,如果不加静态 则内部类会在堆内存中 你不创建内部类对象他是不会出现在堆内存中的,如果不创建内部类对象进行访问而是用this是找不到内部类的
作者: 高光天    时间: 2015-3-25 11:22
高光天 发表于 2015-3-25 11:21
静态会在方法区存在 是可以被外部类对象(this)调用的,如果不加静态 则内部类会在堆内存中 你不创建内部类 ...

个人理解啊
作者: 剑雨飘扬    时间: 2015-3-25 14:12
main函数是静态的,能用this?
作者: 何剑钟    时间: 2015-3-25 15:24
剑雨飘扬 发表于 2015-3-25 14:12
main函数是静态的,能用this?

我也想这样问。。。。
作者: 夜班心桥    时间: 2015-3-26 10:12
当Inner不是static时,需要这样调用show(),在main方法里面,先创建InnerClassDemo6的对象,
然后通过该对象,再创建内部类Inner的对象,最后调用show()。
new InnerClassDemo6().new Inner().show();
这里,楼主还需要注意:在main方法中,由于main是静态方法,所以它里面不能出现this,您可以这样理解,静态的成员跟随类的加载而加载,而this是归对象所有。所以静态方法里面不能出现this。更不能出现您写的This,This不是java里面的关键字。
最后,关于static的用法,请您看一下这个链接。
http://bbs.itheima.com/thread-178394-1-1.html,希望能帮助您理解一下。
作者: 山里孩子    时间: 2015-3-26 22:49
[b]调用类中的方法时必须要new一个对象才能用对象调用其中的方法..  
加静态可以在不创建对象的情况下用类名调用其中的方法.

楼主还要注意下:  this 和  super 关键字不能在 static 类中使用(主函数)  .  静态类是随着类的加载而加载的,,而this一般要创建对象才使用的..加载顺序不一样.




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