黑马程序员技术交流社区

标题: 静态内部类问题. [打印本页]

作者: qowoeo7538    时间: 2014-11-10 03:51
标题: 静态内部类问题.
class A{
        public static class B{
                public void show(){
                        int i = 30;                       
                        System.out.println(this.i);
                }
        }
}
public class Demo {
        public  static void  main(String[] args){
                new A.B().show();
        }
}

new A.B().show(); 语句是实例化外部类还是内部类


作者: yuanlingqi    时间: 2014-11-10 03:51
本帖最后由 yuanlingqi 于 2014-11-10 12:18 编辑
  1. class A {
  2.     public A(){
  3.         System.out.println("A被初始化了");
  4.     }
  5.    
  6.     public static class B {
  7.         public B(){
  8.             System.out.println("B被初始化了");
  9.         }

  10.         public void show() {
  11.             int i = 30;
  12.             // 这个i是局部变量,this是无法访问的
  13.             System.out.println(i);
  14.         }
  15.     }
  16. }

  17. public class TestC {

  18.     /**
  19.      * @param args
  20.      */
  21.     public static void main(String[] args) {
  22.         new A.B().show();
  23.         new A.B().show();
  24.         new A.B().show();
  25.     }
  26. }

  27. B被初始化了
  28. 30
  29. B被初始化了
  30. 30
  31. B被初始化了
  32. 30
复制代码
从上面这段程序的输出可以看出class A并没有被实例化,而静态static修饰的内部B类也并不是只初始化一次。这里的A仅仅起到了路标的作用,表明初始化的是A内部B类



作者: 一叶障目    时间: 2014-11-10 10:09
本帖最后由 一叶障目 于 2014-11-10 11:09 编辑

内部类被静态化,A.B可以当做一个整体看,可以直接new 出内部类的对象
通过A访问B,不需要生成外部类对象
/*new A.B().show();错了吧;
内部类非静态:访问内部类方式:
        A.B  in=new A().new B();
        in.show();
或者:
     A a=new A();
    A.B in=a.new B();
    in.show();
1、开头的A是为了表明生成的内部类对象是属于哪个外部中;
2、必须要有外部类对象才能生成内部类对象,因为内部类的作用就是访问外部类中的成员变量;
*/


作者: 一叶障目    时间: 2014-11-10 11:07
本帖最后由 一叶障目 于 2014-11-10 11:09 编辑

抱歉,刚才说错了
内部类被静态化,A.B可以当做一个整体看,可以直接new 出内部类的对象
通过A访问B,不需要生成外部类对象;
作者: 一叶障目    时间: 2014-11-10 15:31
yuanlingqi 发表于 2014-11-10 12:06
从上面这段程序的输出可以看出class A并没有被实例化,而静态static修饰的内部B类也并不是只初始化一次。这 ...

简单明了,强
作者: 逗比程序员    时间: 2014-11-20 09:49
class A并没有被实例化,而静态static修饰的内部B类也并不是只初始化一次。A是指引的,表明初始化的是A内部B类

作者: Lscreat    时间: 2014-12-2 08:13
学习到了,谢谢= =
作者: a371166028    时间: 2014-12-10 12:25
当你想进黑马的时候,游戏就已经开始了
作者: qowoeo7538    时间: 2014-12-10 18:40
哎,我的黑马币一去不回啊……
作者: boycechan    时间: 2014-12-11 17:45
过来学习下。内部类我也学得有很懵:L




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