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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kid1943   /  2014-10-21 10:15  /  2626 人查看  /  22 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

戏言丶 发表于 2014-10-28 11:36
因为内部类是静态的,不能直接new内部类,相当于不能在静态方法中使用this一样的道理 ...

静态方法是优先于对象先存在的,当静态方法访问非静态成员时,那些非静态成员的对象都不存在,那些成员更不可能调用。
  1. class Person{
  2.         public String name;
  3.        
  4.         public static void show(){
  5.        
  6.                 /*
  7.                 静态方法优先于对象先存在,在执行show()这个方法的时候很有可能这个对象还不存在
  8.                 所以这个this就没有任何的意思,编译的时候直接报错
  9.                 */
  10.                 System.out.println(this.name);
  11.                 this.menthod();
  12.         }

  13.         public void menthod(){
  14.        
  15.         }
  16. }
复制代码
但是这个代码,跟你说的情况不一样,首先已经先创建了外部类对象,对于静态内部类而言这个this已经存在。再者在这个静态内部类中并没有调用非静态成员。
  1. Innerclass ic=new Outclass().new Innerclass();
复制代码
现在唯一能说的通的解释就是20楼所说的情况,这个情况记住就行了。因为这规则就是这样没有为什么。就好像为什么红灯停绿灯行,这就是规则

回复 使用道具 举报
本帖最后由 践行渐远 于 2014-10-28 16:19 编辑

内部类可以当做一个类成员来看待的,楼主之所以可以直接用内部类来创建对象,是因为前面import了外部类与内部类。
回复 使用道具 举报
cvnmklop 发表于 2014-10-28 13:59
静态方法是优先于对象先存在的,当静态方法访问非静态成员时,那些非静态成员的对象都不存在,那些成员更 ...

只好先记住啦 谢谢
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马