//定义父类A
 class A{
  //定义静态块
  static{
   System.out.println("A静态块");
  }
  //定义非静态块
  {
   System.out.println("A非静态块");
  }
  //定义构造方法
  A(){
   System.out.println("A构造方法");
  }
  //定义成员变量
  String name = "A的名字";
  static int ii = 0;
  //定义成员方法
  void A1(){
   System.out.println("A1方法:成员变量name为:"+name+";");
  }
  static void A2(){
   System.out.println("A2方法:静态成员变量ii为:"+ii+";");
  }
  //定义内部类B(内部类也可以定义内部类,即内部类可多重嵌套)
  class B{
   int jj = 1;
   B(){
    System.out.println("B构造方法");
   }
   //定义B的内部类C
   class C{
    C(){
     System.out.println("C构造方法");
    }
   }
  }
 }
 //定义A的子类D
 class D extends A{
  static{
   System.out.println("D静态块");
  }
  {
   System.out.println("D非静态块");
  }
  D(int i){
   System.out.println("D构造方法,i的值为"+i);
  }
 }
 //定义D的子类E
 class E extends D{
  static{
   System.out.println("E静态块");
  }
  {
   System.out.println("E非静态块");
  }
  E(){
   super(ii);
   System.out.println("E构造方法");
  }
  void E1(){
   System.out.println("E1方法");
  }
 }
 //定义运行类F
 class F{
  public static void main(String[] a){
    System.out.println("-----");
   E.A2();//调用E类从A类(继承)下来的静态方法 
    System.out.println("-----");
   E.ii = 7;//为静态成员变量赋值
    System.out.println("-----");
   E e = new E();//创建E类的一个实例化对象
    System.out.println("-----");
   E.B b = e.new B();//创建E继承的内部类B的对象
    System.out.println("-----");
   E.B.C c = b.new C();//创建B的内部类C的对象
    System.out.println("-----");
   E e1 = new E();//创建E类的一个实例化对象
    System.out.println("-----");
   e1.A1();//调用E类继承的A1非静态方法
    System.out.println("-----");
   E e2 = new E();//创建E类的一个实例化对象
    System.out.println("-----");
   e2.E1();//定义E类的成员方法
  }
 }
 /*


运行结果为:

-----
A静态块
A2方法:静态成员变量ii为:0;
-----
-----
D静态块
E静态块
A非静态块
A构造方法
D非静态块
D构造方法,i的值为7
E非静态块
E构造方法
-----
B构造方法
-----
C构造方法
-----
A非静态块
A构造方法
D非静态块
D构造方法,i的值为7
E非静态块
E构造方法
-----
A1方法:成员变量name为:A的名字;
-----
A非静态块
A构造方法
D非静态块
D构造方法,i的值为7
E非静态块
E构造方法
-----
E1方法

例子说明:(类的5种成员:代码块、构造方法、成员变量、成员方法、内部类)
1.产生新对象时类的成员调用顺序:父类静态代码块-子类静态代码块-父类代码块-父类构造方法-子类非静态代码块-子类构造方法
 1.静态代码块只调用一次,非静态代码块每产生一个新对象调用一次
 2.产生新对象时会依次调用父类的代码块和构造方法
 3.父类的内部类子类可以继承(类的多态性)
2.类的内部类仍可以有内部类,即内部类可以嵌套
3.子类可以继承父类(除了构造方法之外)的所有成员,即类的多态性
4.注意的问题:
 注意1:E类调用A类的静态方法A2()时,并没有调用D类和E类的静态代码块?说明子类(继承)父类的静态成员时并不是真的继承,只是子类调用父类的静态成员(多态性)
 注意2:<?>可以推理:子类(继承)父类的非静态成员时也不是真的继承,只是子类对象可以调用父类的非静态成员(这应该就是类的多态性根本的原理:子类的实例化对象即是子类的对象又是父类的对象,调用子类中的成员时这个对象是子类的,调用父类的成员时这个对象是父类的,而不存在实际的继承)
 注意3:创建对象时子类静态代码块比父类非静态代码块先调用?而子类非静态块却在父类构造方法后调用?说明静态块在依附于类,非静态块依附于对象;创建实例化对象时先产生类的静态内存空间并运行静态代码块,然后按父类子类顺序依次产生对象的空间,父类的非静态块与构造方法一样是通过super调用的
*/