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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 彭波 于 2013-3-9 13:41 编辑

class TD
{
int y = 6;
  static class Inner //内部类,静态的
{
   static int y = 3;
    void show()
  {
   System.out.println(y);
  }
}
}
class TC
{
public static void main(String[] args)
{
  TD.Inner ti = new TD().new Inner();//这样建立对象是错的,why?
                                     //怎么建立一个新对象??
  ti.show();
}
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 wodeairenw 于 2013-3-7 22:59 编辑

静态内部类是无法创建对象的,使用里面的功能可以直接是用类名调用,其实和静态方法的定义差不多,静态类就是当程序一旦被执行,静态类直接被放入方法区,可以直接通过类名进行调用,而不需要建立类的对象。。
更改后代码如下:
class TD
{
int y = 6;
   static class Inner //内部类,静态的
{
    static int y = 3;
    static void  show()//先将show方法静态,因为静态不能访问非静态。
   {
    System.out.println(y);
   }
}
}
class TC
{
public static void main(String[] args)
{
  TD.Inner.show();//然后使用类名调用方法
}
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
静态内部类就具备static的特性,也就是说静态内部类中的成员必须都是静态的,都是静态的还有必要创建对象吗?
所以可以这样访问new TD.Inner().show();
class TC
{
public static void main(String[] args)
{
  //TD.Inner ti = new TD().new Inner();//这样建立对象是错的,why?
  new TD.Inner().show();                           //怎么建立一个新对象??
  //ti.show();
}
}希望能帮到你
回复 使用道具 举报
本帖最后由 张洪慊 于 2013-3-7 22:27 编辑

1.用 new TD.Inner();创建对象,我这里创建一个匿名对象
2.我 尝试过 用 new TD().new Inner(); 会报 限定的新静态类
   按说该内部类在成员位置上,虽然是静态的,但也可以通过外部类对象创建
   这个原因一直没找到.等高手.
/*
TD.Inner ti = new TD().new Inner();
ti.show();
*/
以上可以用:new TD.Inner().show();
回复 使用道具 举报
wodeairenw 发表于 2013-3-7 22:11
静态内部类是无法创建对象的,使用里面的功能可以直接是用类名调用,其实和静态方法的定义差不多,静态类就 ...

有道理,我失误了,基础不扎实
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马