黑马程序员技术交流社区

标题: 对静态代码块,构造代码块,构造方法,加载顺序的验证 [打印本页]

作者: 无奈的我+.l    时间: 2014-4-15 16:48
标题: 对静态代码块,构造代码块,构造方法,加载顺序的验证
  1. package cn.my;

  2. class Person{
  3.         private String name;
  4.         private int age;

  5.         Person (){
  6.                 System.out.println("父类空参数的构造方法!");
  7.         }
  8.        
  9.         Person (String name,int age){
  10.                 this.name = name;
  11.                 this.age = age;
  12.                 System.out.println("父类有参数的构造方法!");
  13.         }
  14. }

  15. class Student extends Person{
  16.         private int id;
  17.         Student (String name,int age,int id){
  18.                 //super(name,age);
  19.                 this.id = id;
  20.                 //super(name,age);
  21.                 System.out.println("子类的构造方法!");
  22. }
  23. }

  24. class Test2{
  25.         public static void main (String[] agrs){
  26.                 Student s = new Student("wangsan",12,123);
  27.                
  28.         }
  29. }


复制代码


运行结果:父类空参数的构造方法!
子类的构造方法!
当第一条super存在时,自动将参数回传到有参父类构造方法,程序执行结果:

执行了父类有参构造方法!

子类构造方法执行!

当第二条super存在时,系统编译错误,调用父类构造方法必须为第一行。

  1. package cn.my;

  2. class Static1{
  3.         Static1 (){
  4.                 System.out.println("父类构造函数!");
  5.         }
  6.         static{
  7.                 System.out.println("父类静态");
  8.         }
  9.         {
  10.                 System.out.println("父类构代码块!");
  11.         }
  12. }

  13. class Static2 extends Static1{
  14.         Static2(){
  15.                 System.out.println("子类构造函数!");
  16.         }
  17.         static{
  18.                 System.out.println("子类静态");
  19.         }
  20.         {
  21.                 System.out.println("子类构造代码块!");
  22.         }
  23. }

  24. class Static3{
  25.         static {
  26.                 System.out.println("static3的静态构造代码块");
  27.         }
  28.         static void show(){
  29.                 System.out.println("static3的show");
  30.         }
  31. }

  32. class Test3 {
  33.         public static void main(String[] ages){
  34.                 new Static2();
  35.                 Static3.show();
  36.         }

  37. }
复制代码


运行结果:
父类静态
子类静态
父类构代码块!
父类构造函数!
子类构造代码块!
子类构造函数!
static3的静态构造代码块
static3的show

总结:通过此段代码可以了解,随着类的加载静态代码块最先执行,子类的静态代码块优先于父类的构造代码块。父类的构造方法要优先于子类的构造代码块,当父类的构造代码块和构造函数完全执行完,才会执行子类的构造代码块、构造函数。


作者: ^o(孤8o|狼i¤F    时间: 2014-4-16 01:30
先执行静态代码块 后是代码块 最后是 构造函数




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