黑马程序员技术交流社区

标题: 请问各位,下面代码 [打印本页]

作者: 慕容冰若    时间: 2014-3-17 12:30
标题: 请问各位,下面代码
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呢???看了视频,还是没理解。。。。。求大神指教啊
作者: vtming    时间: 2014-3-17 12:48
class Outer//外部类。
{
       private static int num = 4;
      
       static class Inner//内部类
       {
               void show()
                {
                        System.out.println("Innershow run..."+Outer.this.num);
                }
               
       }
}
访问时用的外部非静态成员要用实例去访问访问。变为static后,没有了对象实例,所以访问会出错。所以会编译出错

作者: 焚雨成灰    时间: 2014-3-17 12:49
静态类(static class)即定义了静态方法,静态变量,静态代码块或者内部静态类的类。这些静态成员不需要实例化即可直接引用
所以静态类内的成员都是静态的,静态方法只能调用静态变量,否则会报错。
作者: 李猛    时间: 2014-3-17 13:00
静态内部类的方法不能访问外部类的非静态成员,不然编译出错。如果内部类中定义静态方法或成员那么该内部类必须是静态的,如果仅仅是非静态内部类可以访问外部类的成员,包括是私有的
作者: 汗血黑马    时间: 2014-3-17 13:02
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修饰符修饰。
作者: 张贺    时间: 2014-3-17 14:51
因为Inner是静态类,静态成员内部不能直接访问非静态成员,如果你理解静态方法中不能直接访问非静态成员变量,那静态类一样,在静态类的整个作用域(就是{}内)都不能直接使用非静态成员,而不单单是你所定义的方法不是静态的就可以使用静态成员!
作者: 慕容冰若    时间: 2014-3-19 20:13
好吧,谢谢各位了啊
作者: 戒爱    时间: 2014-3-20 01:01
本帖最后由 戒爱 于 2014-3-20 01:07 编辑

我简单说一句,就一句,类定义在内部扮演着外部类内部的一个成员




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2