Java构造方法
在Java文件中,每个类都有一个构造方法,例如:
package j2se.obj.demo;
public class UserInfo {
}
在这个文件中,没有看到构造方法,但是虚拟机会自动填上构造方法:public UserInfo(){}
package j2se.obj.demo;
public class UserInfo {
public UserInfo(){
}
}
若写上构造方法之后,虚拟机便不会自动填上构造方法,以写上的构造方法为准。
方法名字相同,则根据传入参数决定调用哪个方法。
构造方法之间不能相互调用,否则会产生无限循环。
关键字this
this代表的是实例化的对象。例如:
package j2se.obj.constructs;
public class UserInfo extends Human{
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
/*public UserInfo(){
}*/
public UserInfo(String name){
//this(11);
//不能相互调用
this.name = name;
System.out.println("UserInfo(String name)");
}
public UserInfo(Integer age){
this("mike");
//super();
//调用构造方法的代码,只能写在第一行
System.out.println("UserInfo(Integer age)");
}
}
若在别处实例化一个UserInfo对象
UserInfo 张三 = new UserInfo();
则表示this代表的是张三。
Java初始化顺序
父类文件:
package j2se.obj.instances;
public class Father {
int a=1;
static int b=2;
{
System.out.println("father-a=="+a);
System.out.println("father-b=="+b);
}
static{
//System.out.println("a=="+a);
System.out.println("father-static-b=="+b);
}
public Father(){
System.out.println("father-构造方法-a=="+a);
System.out.println("father-构造方法-b=="+b);
}
}
子类文件:
package j2se.obj.instances;
public class Son extends Father{
int a=1;
static int b=2;
//初始化块
{
System.out.println("son-a=="+a);
System.out.println("son-b=="+b);
}
static{
//System.out.println("a=="+a);
System.out.println("son-static-b=="+b);
}
public Son(){
System.out.println("son-构造方法-a=="+a);
System.out.println("son-构造方法-b=="+b);
}
}
测试文件:
package j2se.obj.instances;
public class MyTest {
public static void main(String[] args) {
new Son();
}
}
运行此程序得到的结果是:
father-static-b==2
son-static-b==2
father-a==1
father-b==2
father-构造方法-a==1
father-构造方法-b==2
son-a==1
son-b==2
son-构造方法-a==1
son-构造方法-b==2
由此可以看出:
1. 变量b和变量a在初始化块之前已经初始化。
2. 先初始化的是父类静态块,再父类构造方法,然后才初始化子块,子类构造方法。