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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zcbyzcb 中级黑马   /  2013-5-18 20:51  /  1604 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zcbyzcb 于 2013-5-19 11:54 编辑

真想每天都来这里帮别人解决一些问题,而不是总在这里发问。
不多说先来代码吧:
class A
{
        static int  num=2;
         class C
        {
                void show()
                {
                        System.out.println("C show");
                }
        }
        public static void show()
        {
                new C().show();
        }
}
毕老师虽讲了,但还是不太理解,为什么外部类中的静态方法访问非静态内部类方法不行呢?而在main方法中创建对象可以访问非静态类的方法。
例如:
class A
{
       public void show()
{
        System.out.println("hello java");
}
}

class TestA
{
      public static void main(String [] args)
{
       A a=new A();
       a.show();
}
}
同样是一个类中的静态方法访问另一个类中非静态方法呀?求解。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

7 个回复

正序浏览
zcbyzcb 发表于 2013-5-19 08:45
可否说的具体一点呢?

如果理解不了 记住结论就行了(静态的只能调用静态的,不能调用非静态的),后面很多很多的重复,我开始也不理解,但记住了结论,后面重复多了 我突然就理解了
回复 使用道具 举报
zcbyzcb 发表于 2013-5-19 08:48
哥们,我是这样理解的,不知道行不行,class C是class A中的一个成员,但是非静态的,而在静态方法中必须 ...

也可这样理解。。  静态方法只能访问本类中的静态成员,把ClassC当作静态成员即可。
回复 使用道具 举报
赵崇友 发表于 2013-5-18 21:27
这个问题是这样的,当外部类静态方法访问非静态内部类方法的时候,需要先创建内部类对象,然后才可调用内部 ...

哥们,我是这样理解的,不知道行不行,class C是class A中的一个成员,但是非静态的,而在静态方法中必须调用静态的,所以new C通不过。
回复 使用道具 举报
炉海佳 发表于 2013-5-18 21:20
这个问题你只要搞清楚初始化的先后顺序就知道怎么回事了,静态方法是随类的加载而加载,它在对象前面,所以 ...

可否说的具体一点呢?
回复 使用道具 举报
这个问题是这样的,当外部类静态方法访问非静态内部类方法的时候,需要先创建内部类对象,然后才可调用内部类的方法。不是不可以,只是你创建的对象格式不对。看改正如下:
  1. class A
  2. {
  3.         static int  num=2;
  4.          class C
  5.         {
  6.                 void show()
  7.                 {
  8.                         System.out.println("C show");
  9.                 }
  10.         }
  11.         public static void show()
  12.         {
  13.                 new A().new C().show();//在创建内部类对象的时候,要先确定是哪个外部类的内部类。这个视频里有讲解,你应该有印象。另外这里是静态方法中所以要先建内部类对象,才可以调用其方法,这是static的特性。
  14.         }
  15. }
复制代码
回复 使用道具 举报
这个问题你只要搞清楚初始化的先后顺序就知道怎么回事了,静态方法是随类的加载而加载,它在对象前面,所以不知道后面的事情
回复 使用道具 举报
理解问题。
静态当然不能直接访问静态。
A a=new A();// 实例化对象A
也就是说此时拥有了A的方法(私有不能调用除外)
当然是可以调用的。也就是说静态是可以间接通过实例化对象来调用对象的方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马