这周学习到Java方法
通过菜鸟教程了解到很多
动手动脑:
如何比较两个对象的“内容”是否一样
两个对象的“内容”,其实是指它们在某一时刻的所有字段的值,“内容相等”,其实是就“对应字段值”一致。 在Java中要比对两个对象的字段值,可以 “重写(override)”基类的equals()方法
Foo类重构了构造函数,但是没有写无参的构造函数。所以在主函数中声明对象时,调用无参构造函数失败,报错
TestStaticInitializeBlock.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
class Root { static { System.out.println( "Root的静态初始化块" ); } { System.out.println( "Root的普通初始化块" ); } public Root() { System.out.println( "Root的无参数的构造器" ); } } class Mid extends Root { static { System.out.println( "Mid的静态初始化块" ); } { System.out.println( "Mid的普通初始化块" ); } public Mid() { System.out.println( "Mid的无参数的构造器" ); } public Mid(String msg) { //通过this调用同一类中重载的构造器 this (); System.out.println( "Mid的带参数构造器,其参数值:" + msg); } } class Leaf extends Mid { static { System.out.println( "Leaf的静态初始化块" ); } { System.out.println( "Leaf的普通初始化块" ); } public Leaf() { //通过super调用父类中有一个字符串参数的构造器 super ( "Java初始化顺序演示" ); System.out.println( "执行Leaf的构造器" ); } } public class TestStaticInitializeBlock { public static void main(String[] args) { new Leaf(); } } |
静态初始化块的执行顺序:
静态初始化块总是最先执行,再执行public函数,最后执行函数。
1.静态初始化块只执行一次。
2.创建子类型的对象时,也会导致父类型的静态初始化块的执行