黑马程序员技术交流社区

标题: 内部类静态代码块 [打印本页]

作者: 帅哥哥    时间: 2014-5-23 09:14
标题: 内部类静态代码块
本帖最后由 帅哥哥 于 2014-5-23 13:42 编辑

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

各种内部类在其它类中建立对象的时候,是怎么初始化的,或者说是怎么进内存的?
作者: 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. }
复制代码

作者: 帅哥哥    时间: 2014-5-23 13:42
Dark_Horse 发表于 2014-5-23 09:50
成员内部类 之所以叫做成员 就是说他是类实例的一部分,而不是类的一部分,而静态的是类的一部分和实例无关 ...

哦,想明白了,静态代码块也是类的成员,要受到成员受的限制的,
内部类其实放在成员位置上或是局部,就要受到相应的限制,但还有类的特性,对吧~





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