1.静态代码块---给类初始化,随着类的加载而执行,只执行一次(注:仅创建类的引用(即只申明)并不会触动对该类的加载)
/** * 静态代码块 * 特点:随着类的加载而执行,只执行一次,用于给类经行初始化 */ static{ System.out.println("a"); }
2.(显示初始化块)构造代码块---给对象初始化,
/** * 构造代码块 * 作用:给对象进行初始化 * 对象一建立就运行,而且优先于构造函数执行 * * 和构造函数的区别 * 构造代码块是给所有对象进行统一初始化,而构造函数给对应的对象初始化(给不同的对象经行分别初始化,如无参构造函数、有参构造函数) * * 构造代码块中定义的是不同对象共性的初始化内容 */ { }
3.构造函数--给对应对象初始化
4.this
/** * this语句,用于构造函数之间进行互相调用,因为this代表对应对象,而构造函数是给对应对象初始化,都是同一个对象 * this语句,只能定义在构造函数的第一行--规则的解释:因为初始化得先执行,自己设置的值在后面才可以覆盖系统的初始化,不然顺序一反就是系统的默认初始化覆盖自己的设置 * * @param name */ public Demo(String name) { this.name="haha"; } public Demo(String name,int age){ this(name); this.name=name; this.age=age; System.out.println("A:name="+name+",age="+age); // cry(); }
以下内容总代码:
package com.dreamly.day01; /** * @author dreamly * */ public class Demo { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } /** * 静态代码块 * 特点:随着类的加载而执行,只执行一次,用于给类经行初始化 */ static{ System.out.println("a"); } /** * 构造代码块 * 作用:给对象进行初始化 * 对象一建立就运行,而且优先于构造函数执行 * * 和构造函数的区别 * 构造代码块是给所有对象进行统一初始化,而构造函数给对应的对象初始化(给不同的对象经行分别初始化,如无参构造函数、有参构造函数) * * 构造代码块中定义的是不同对象共性的初始化内容 */ { //定义不同对象共性的初始化部分可写在此处,比如cry()方法 cry(); } public Demo(){ this("hah"); System.out.println("A:name="+name+",age="+age); // cry(); } /** * this语句,用于构造函数之间进行互相调用,因为this代表对应对象,而构造函数是给对应对象初始化,都是同一个对象 * this语句,只能定义在构造函数的第一行--规则的解释:因为初始化得先执行,自己设置的值在后面才可以覆盖系统的初始化,不然顺序一反就是系统的默认初始化覆盖自己的设置 * * @param name */ public Demo(String name) { this.name="haha"; } public Demo(String name,int age){ this(name); this.name=name; this.age=age; System.out.println("A:name="+name+",age="+age); // cry(); } private void cry() { System.out.println("cry..."); } }
package com.dreamly.day01; /** * @author dreamly * */ public class DemoTest { public static void main(String[] args) { Demo d=new Demo(); d.setName("lily"); d.setAge(20); } }
package com.dreamly.day01; /** * @author dreamly * */ public class Demo2 { int num=5; static { System.out.println("b"); } { System.out.println("c"+this.num); } Demo2(){ System.out.println("a"); } Demo2(int num){ System.out.println("d"); } public static void main(String[] args) { Demo2 d2=new Demo2(); d2.num=4;//执行顺序 b c5 a } }
package com.nico.test; public class Demo1 { static int i; static { // System.out.println("静态块"); i = 8; //2 } { System.out.println("初始化块"); i = 10; //7 } public Demo1() { //如果有显式初始化块,先执行初始化块 4 this( "i = " + i ); //5 如果要在无参构造调用其它构造函数,那么这条语句只能写在第一行 System.out.println("无参构造函数"); } public Demo1(String str) { //6 System.out.println(str); //8 "i = 8"; } public static void main(String[] args) { Demo1 d = new Demo1(); //1 3 } }