首页 > 编程语言 > 详细

Java课后学习

时间:2019-10-17 14:46:41      阅读:53      评论:0      收藏:0      [点我收藏+]

  下段代码为何报错(new Foo())?

 1 public class Practice {
 2     public static void main(String[] args) {
 3         Foo obj1 = new Foo();
 4     }
 5 }
 6 class Foo{
 7     int value;
 8     public Foo(int initValue) {
 9         value = initValue;
10     }
11 }

原因:若类提供了一个自定义的构造方法,将导致系统不再提供默认的构造方法。

  运行下段代码:

 1 class Root
 2 {
 3     static{
 4         System.out.println("Root的静态初始化块");
 5     }
 6     {
 7         System.out.println("Root的普通初始化块");
 8     }
 9     public Root()
10     {
11         System.out.println("Root的无参数的构造器");
12     }
13 }
14 class Mid extends Root
15 {
16     static{
17         System.out.println("Mid的静态初始化块");
18     }
19     {
20         System.out.println("Mid的普通初始化块");
21     }
22     public Mid()
23     {
24         System.out.println("Mid的无参数的构造器");
25     }
26     public Mid(String msg)
27     {
28         //通过this调用同一类中重载的构造器
29         this();
30         System.out.println("Mid的带参数构造器,其参数值:" + msg);
31     }
32 }
33 class Leaf extends Mid
34 {
35     static{
36         System.out.println("Leaf的静态初始化块");
37     }
38     {
39         System.out.println("Leaf的普通初始化块");
40     }    
41     public Leaf()
42     {
43         //通过super调用父类中有一个字符串参数的构造器
44         super("Java初始化顺序演示");
45         System.out.println("执行Leaf的构造器");
46     }
47 
48 }
49 
50 public class TestStaticInitializeBlock
51 {
52     public static void main(String[] args) 
53     {
54         new Leaf();
55         
56 
57     }
58 }

技术分享图片

静态初始化块执行顺序:

运行时先执行static,即静态的初始化块,顺序是由父类先开始执行,再执行子类;之后由父类先开始执行普通的初始化块,再执行无参构造方法,最后执行有参构造方法,父类执行完之后子类开始执行,顺序不变。

Java课后学习

原文:https://www.cnblogs.com/20183711PYD/p/11691605.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!