代码改变世界

动手动脑三

2018-10-21 17:55  一念永恒s  阅读(286)  评论(0编辑  收藏  举报

如果类提供了一个自定义的构造方法,系统不再提供默认的构造方法。

2

  1 .public static void main(String[] args) {
  2         
  3         InitializeBlockClass obj=new InitializeBlockClass();
  4         System.out.println(obj.field);
  5         
  6         obj=new InitializeBlockClass(300);
  7         System.out.println(obj.field);
  8     }
  9 }
 10  
 11 Java进行初始化的地方有两个:初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块。
 12 静态初始化块是类中由static修饰的初始化块,实例初始化块为类中没有任何关键字修饰的初始化语句。
 13 如果在主函数中创建对象时没有形参时,如果在类中定义了公共的变量并给与了赋值,那么就会把值赋给主函数中的变量,再调用类中的默认构造函数,
 14 如果在主函数中创建对象时有形参,则调用类中对应的构造函数。
 15 3.class Root
 16  
 17 {
 18  
 19          static{
 20  
 21                   System.out.println("Root的静态初始化块");
 22  
 23          }
 24  
 25          {
 26  
 27                   System.out.println("Root的普通初始化块");
 28  
 29          }
 30  
 31          public Root()
 32  
 33          {
 34  
 35                   System.out.println("Root的无参数的构造器");
 36  
 37          }
 38  
 39 }
 40  
 41 class Mid extends Root
 42  
 43 {
 44  
 45          static{
 46  
 47                   System.out.println("Mid的静态初始化块");
 48  
 49          }
 50  
 51          {
 52  
 53                   System.out.println("Mid的普通初始化块");
 54  
 55          }
 56  
 57          public Mid()
 58  
 59          {
 60  
 61                   System.out.println("Mid的无参数的构造器");
 62  
 63          }
 64  
 65          public Mid(String msg)
 66  
 67          {
 68  
 69                   //通过this调用同一类中重载的构造器
 70  
 71                   this();
 72  
 73                   System.out.println("Mid的带参数构造器,其参数值:" + msg);
 74  
 75          }
 76  
 77 }
 78 class Leaf extends Mid
 79  
 80 {
 81  
 82          static{
 83  
 84                   System.out.println("Leaf的静态初始化块");
 85  
 86          }
 87  
 88          {
 89  
 90                   System.out.println("Leaf的普通初始化块");
 91  
 92          }     
 93  
 94          public Leaf()
 95  
 96          {
 97                   super("Java初始化顺序演示");
 98                   System.out.println("执行Leaf的构造器");
 99          }
100 }
101  
102   
103  
104 public class TestStaticInitializeBlock
105  
106 {
107  
108          public static void main(String[] args)
109  
110          {
111  
112                   new Leaf();
113  
114          }
115  
116 }

 

 

静态初始化块的执行顺序:

1.静态初始化块只执行一次。

2.创建子类型的对象时,也会导致父类型的静态初始化块的执行。

4,
数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。
5.public class InitializeBlockClass {
    {field=200;}
    public int field=100;
    public InitializeBlockClass(int value) {
        this.field=value;
    }
 
    public InitializeBlockClass() {
         
    }
}
public class obj {
    public static void main(String[] args) {
        InitializeBlockClass obj=new InitializeBlockClass();
        System.out.println(obj.field);
        obj=new InitializeBlockClass(300);
        System.out.println(obj.field);
    }
 
}
结果为:100 300