A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dengjia1778 初级黑马   /  2015-3-25 09:58  /  1382 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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调用?

8 个回复

倒序浏览
静态会在方法区存在 是可以被外部类对象(this)调用的,如果不加静态 则内部类会在堆内存中 你不创建内部类对象他是不会出现在堆内存中的,如果不创建内部类对象进行访问而是用this是找不到内部类的
回复 使用道具 举报
高光天 发表于 2015-3-25 11:21
静态会在方法区存在 是可以被外部类对象(this)调用的,如果不加静态 则内部类会在堆内存中 你不创建内部类 ...

个人理解啊
回复 使用道具 举报
main函数是静态的,能用this?
回复 使用道具 举报
剑雨飘扬 发表于 2015-3-25 14:12
main函数是静态的,能用this?

我也想这样问。。。。

点评

哥们,这是要我试啥。。。。  发表于 2015-3-25 16:16
have a try and you will know  发表于 2015-3-25 15:29
回复 使用道具 举报
当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,希望能帮助您理解一下。
回复 使用道具 举报 1 0
[b]调用类中的方法时必须要new一个对象才能用对象调用其中的方法..  
加静态可以在不创建对象的情况下用类名调用其中的方法.

楼主还要注意下:  this 和  super 关键字不能在 static 类中使用(主函数)  .  静态类是随着类的加载而加载的,,而this一般要创建对象才使用的..加载顺序不一样.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马