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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 慕容冰若 中级黑马   /  2014-3-17 12:30  /  1210 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Outer//外部类。
{
        private static int num = 4;
       
        static class Inner//内部类
        {
                void show()
                {
                        System.out.println("Inner show run..."+num);
                }
               
        }
}
       



class InnerClassDemo
{
        public static void main(String[] args)
        {
                Outer.Inner in = new Outer.Inner();
                in.show();
}


        Inner是用static修饰的,但是show没用static修饰啊。。。可是为什么访问num时,要用static修饰num呢???看了视频,还是没理解。。。。。求大神指教啊

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

7 个回复

倒序浏览
class Outer//外部类。
{
       private static int num = 4;
      
       static class Inner//内部类
       {
               void show()
                {
                        System.out.println("Innershow run..."+Outer.this.num);
                }
               
       }
}
访问时用的外部非静态成员要用实例去访问访问。变为static后,没有了对象实例,所以访问会出错。所以会编译出错

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
静态类(static class)即定义了静态方法,静态变量,静态代码块或者内部静态类的类。这些静态成员不需要实例化即可直接引用
所以静态类内的成员都是静态的,静态方法只能调用静态变量,否则会报错。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
静态内部类的方法不能访问外部类的非静态成员,不然编译出错。如果内部类中定义静态方法或成员那么该内部类必须是静态的,如果仅仅是非静态内部类可以访问外部类的成员,包括是私有的

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
class Outer//外部类
{
        private static int num = 4;//私有化num,并声明为静态的。
        static class Inter//内部类
        {
                void show()//内部方法
                {
                        System.out.println("Inner show run..:"+num);
                }//在控制台输出打印num,
        }
}
class InnerClassDemo//定义了一个类
{
        public static void main(String args)//程序主函数
        {
                Outer.Inner in = new OuterInner();//建立Outer类的实例对象。
                in.show();//调用Outer的show方法。
        }
}//因为主函数是静态的,静态只能访问静态,不能访问非静态,所以num必须要被static修饰符修饰。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
因为Inner是静态类,静态成员内部不能直接访问非静态成员,如果你理解静态方法中不能直接访问非静态成员变量,那静态类一样,在静态类的整个作用域(就是{}内)都不能直接使用非静态成员,而不单单是你所定义的方法不是静态的就可以使用静态成员!

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
好吧,谢谢各位了啊
回复 使用道具 举报
戒爱 中级黑马 2014-3-20 01:01:46
8#
本帖最后由 戒爱 于 2014-3-20 01:07 编辑

我简单说一句,就一句,类定义在内部扮演着外部类内部的一个成员
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马