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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qowoeo7538 中级黑马   /  2014-11-10 03:51  /  2892 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
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(); 语句是实例化外部类还是内部类

最佳答案

查看完整内容

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

9 个回复

倒序浏览
本帖最后由 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 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:09 编辑

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

简单明了,强
回复 使用道具 举报
class A并没有被实例化,而静态static修饰的内部B类也并不是只初始化一次。A是指引的,表明初始化的是A内部B类
回复 使用道具 举报
学习到了,谢谢= =
回复 使用道具 举报
当你想进黑马的时候,游戏就已经开始了
回复 使用道具 举报
哎,我的黑马币一去不回啊……
回复 使用道具 举报
过来学习下。内部类我也学得有很懵:L
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马