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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 帅哥哥 高级黑马   /  2014-5-23 09:14  /  1040 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 帅哥哥 于 2014-5-23 13:42 编辑

为什么成员内部类和局部内部类不能有静态代码块,只有静态内部类才可以有?

各种内部类在其它类中建立对象的时候,是怎么初始化的,或者说是怎么进内存的?

2 个回复

正序浏览
Dark_Horse 发表于 2014-5-23 09:50
成员内部类 之所以叫做成员 就是说他是类实例的一部分,而不是类的一部分,而静态的是类的一部分和实例无关 ...

哦,想明白了,静态代码块也是类的成员,要受到成员受的限制的,
内部类其实放在成员位置上或是局部,就要受到相应的限制,但还有类的特性,对吧~
回复 使用道具 举报
成员内部类 之所以叫做成员 就是说他是类实例的一部分,而不是类的一部分,而静态的是类的一部分和实例无关,不用类的对象实例就可调用。
第二个问题看下以下代码
  1. package com.test.java;

  2. public class ChengYuanNeiBuLeiTest {

  3.         /**
  4.          *
  5.          * 成员内部类等同于成员方法
  6.          * 成员内部类中不能有静态声明的的方法
  7.          * 成员内部类可以访问外部类的所有方法
  8.          
  9.          * 局部内部类等同于局部变量,不能用访问控制权限控制
  10.          * 局部内部类不能有静态声明
  11.          * 局部内部类在访问局部变量的时候,局部变量必须使用final修饰
  12.          * 局部内部类的访问方法,因为他是局部内部类,就相当于局部变量,只有在大括号之内才有效
  13.          * 所以只能在大括号里面new一个新对象
  14.          * 局部内部类要访问局部变量必须声明为final类型
  15.          */
  16.        
  17.         //局部内部类
  18.         public void m3(){
  19.                  final int i = 10;
  20.                 class JuBuNeiBuLei{
  21.                         public void m4(){
  22.                                 System.out.println(i+"局部内部类");
  23.                         }
  24.                 }
  25.                 //要想访问m4方法 ,只要访问m3方法就可以访问m4方法
  26.                 JuBuNeiBuLei jb = new JuBuNeiBuLei();
  27.                 jb.m4();
  28.         }
  29.         //成员内部类等同于成员方法如下
  30.         class InnerClass{
  31.                 public void m4(){
  32.                         System.out.println(s1);
  33.                         m1();
  34.                         System.out.println(s2);
  35.                         m2();
  36.                 }
  37.         }
  38.         //静态变量
  39.         private static String s1="A";
  40.         //成员变量
  41.         private String s2="B";
  42.         //静态方法
  43.         private static void m1(){
  44.                 System.out.println("静态方法执行");
  45.         }
  46.         private static void m2(){
  47.                 System.out.println("第二个成员方法执行");
  48.         }
  49.        
  50.         public static void main(String[] args) {
  51.                 // TODO Auto-generated method stub
  52.                 //创建外部类对象
  53.                 /**
  54.                  * 访问成员内部类的方法:
  55.                  * 先创建外部类然后用外部类的引用去创建内部类如下格式
  56.                  */
  57.                 ChengYuanNeiBuLeiTest cy = new ChengYuanNeiBuLeiTest();
  58.                 InnerClass in = cy.new InnerClass();
  59.                 in.m4();
  60.                 //访问局部内部类
  61.                 ChengYuanNeiBuLeiTest cy1 = new ChengYuanNeiBuLeiTest();
  62.                 cy1.m3();
  63.         }

  64. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马