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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘海陆 中级黑马   /  2013-3-30 08:28  /  1402 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘海陆 于 2013-3-30 10:55 编辑

大家先看代码:
class Fu
{
        private static int  nums = 1;
        //private int num = 2;
        static class Zi
        {
                static void shows()
                {
                        System.out.println("nums="+nums);
                }
        }
}

class ExceptionDemo1
{
        public static void main(String[] args)
        {
                new Fu(). new Zi().shows();
        }
}


执行的结果是:

E:\JavaTest\day10>javac ExceptionDemo1.javaExceptionDemo1.java:18: 限定的新静态类
                new Fu(). new Zi().shows();
                ^
1 错误


被static修饰的 成员虽然可以不用创建对象直接被类名调用;但是我想创建对象然后在调用,为什么不行呢?


评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
你的调用错了,内部类被static修饰后,它就具备了静态的成员功能,调用方法是  new Fu.Zi().shows();
而你调用的是内部类的对象,所以报错!
回复 使用道具 举报
静态内部类和非静态内部类是有区别的,非静态内部类必须先创建外部类对象(定义在类内部的),才能创建累不累对象,
静态内部类没有指向外部类的引用,直接new就行啦,不能通过外部类new
回复 使用道具 举报
魏福伟 发表于 2013-3-30 09:10
静态内部类和非静态内部类是有区别的,非静态内部类必须先创建外部类对象(定义在类内部的),才能创建累不 ...

还是没太明白了; 就是 报错信息上说的 限定的新静态类 是什么意思。
还有就是  你说的静态内部类没有指向外部类的引用,静态内部了访问的外部类的静态成员不也是引用吗
回复 使用道具 举报
刘海陆 发表于 2013-3-30 09:36
还是没太明白了; 就是 报错信息上说的 限定的新静态类 是什么意思。
还有就是  你说的静态内部类没有指 ...

这里的引用和你理解的应该不一样,这里是(类名.this);非静态内部类可以通过(类名.this)访问外部类,所以创建非静态内部类时,必须创建外部类对象,而静态内部类就没有.this,创建对象直接new
回复 使用道具 举报
明白这个首先要掌握格式:当内部类定义在外部类的成员位置上且非私有时,可以在外部其他类中直接建立内部类对象。格式是:外部类名.内部类名  变量名 = 外部类对象.内部类对象;
                                    当内部类定义在外部类的成员位置上且被static修饰时,外部其他类访问内部类静态成员 。    格式是:外部类名.内部类名.内部类静态成员();
                                     当内部类定义在外部类的成员位置上且被static修饰时,外部其他类访问内部类非静态成员 。格式是:外部类名.内部类名().内部类静态成员();
  1. class Fu
  2. {
  3.         private static int  nums = 1;
  4.         //private int num = 2;
  5.         static class Zi
  6.         {
  7.                 static void shows()
  8.                 {
  9.                         System.out.println("nums="+nums);
  10.                 }
  11.         }
  12. }

  13. class ExceptionDemo1
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 //new Fu(). new Zi().shows();这个是你的错误
  18.                 new Fu.Zi().shows();//更改后的
  19.         }
  20. }
复制代码
回复 使用道具 举报
嗯,谢谢大家了,
我明白了,就是
限定的新静态类 这句话的意思是 静态内部类new的时候不需要外部类的实例的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马