java吧 关注:1,225,284贴子:12,682,110

新手弱弱的问个问题

只看楼主收藏回复

根据静态不能访问非静态原理,为什么main方法中第一行代码可以在静态main方法中创建非静态内部类的对象


IP属地:北京来自Android客户端1楼2017-03-23 18:19回复
    弱弱的求下解答


    IP属地:北京来自Android客户端2楼2017-03-23 18:20
    回复
      编译第一行代码编译器没有报错


      IP属地:北京来自Android客户端3楼2017-03-23 18:22
      回复
        自顶


        IP属地:北京来自Android客户端4楼2017-03-23 18:25
        回复
          一个类里面可以再写一个类吗。


          IP属地:安徽6楼2017-03-23 21:05
          收起回复
            public class A{}
            class B{}
            public class A{
            class B{
            ???????
            }
            }


            IP属地:安徽7楼2017-03-23 21:07
            收起回复

              其他的我不知道,但我可以找出反例,B类可以直接用方法访问Test中的数据,如果只创建个B,那会输出个啥?


              8楼2017-03-23 21:16
              收起回复
                New 从类外部开始找。New A是可以找到本类对象,再new B是是调用类中的类。直接new B它会在外边找不到。


                来自Android客户端9楼2017-03-23 21:30
                回复
                  静态不能访问非静态是什么鬼????? 谁说的


                  IP属地:河南10楼2017-03-23 21:59
                  回复
                    你可以把类b看成类a的一个成员属性


                    IP属地:北京来自Android客户端11楼2017-03-24 00:03
                    回复
                      这跟静态没有什么关系,访问某个类的内部类的语法就是第一行这种写法,要么内部类加static修饰,类似于方法之余类的关系


                      IP属地:湖南来自iPhone客户端12楼2017-03-24 11:34
                      收起回复
                        楼主只是记住了概念了,忘了本质,静态方法不能访问非静态变量和方法的原因是静态方法能在对象还未创建时,直接使用类名调用,此时成员变量和方法都不存在,访问就更谈不上了,你main方法里的:
                        new A().new B();
                        B b = new b();
                        是在方法调用后,创建了两个实例对象,匿名对象和b,这是允许的,如果class B里面有成员变量的话,你也可以用对象b去访问,因为b在main方法中是个局部变量,它是在方法调用后,通过对象创建才存在的。


                        来自Android客户端13楼2017-03-24 13:55
                        收起回复
                          B是内部类


                          14楼2017-03-24 14:37
                          回复
                            B b=new A().new B();


                            IP属地:山东15楼2017-03-24 14:37
                            回复


                              IP属地:北京来自Android客户端16楼2017-03-24 20:42
                              回复