构造方法是在类中定义的一种特殊方法,主要功能是完成对象属性的初始化操作。
构造方法是在实例化对象的时候使用,而普通方法是在实例化对象产生之后使用的。
构造方法的定义:
构造方法的名称和类名称保持一致。
构造方法不允许有返回值类型声明。
一个类中至少一个构造方法
··如果没有声明,则会自动生成一个无惨函数。
class Preson{ //类名称
public Preson(){ //无惨构造
}
}
范例:定义构造方法为属性初始化
class Eighty {
private String name;
private int age;
private String home;
public void setName(String newname) {
name=newname;
}
public String getName() {
return name;
}
public void setAge(int newage) {
age=newage;
}
public int getAge() {
return age;
}
public void setHome(String newhome) {
home=newhome;
}
public String getHome() {
return home;
}
public Eighty() {
}
public Eighty(String newname,int newage,String newhome) {
name=newname;
age=newage;
home=newhome;
}
public void tell() {
System.out.println("我叫"+name+",我家是"+home+"人,我今年"+age+"岁了");
}
}
public class Eightyb {
public static void main(String[] args) {
Eighty per=new Eighty("江南",20,"浙江温州");
per.tell();
}
}
执行结果
我叫江南,我家是浙江温州人,我今年20岁了
构造方法也可以进行重载,只需要考虑参数类型及个数即可,而方法名称一定要和类名称保持一致、。
class Eighty {
private String name;
private int age;
private String home;
public void setName(String newname) {
name=newname;
}
public String getName() {
return name;
}
public void setAge(int newage) {
age=newage;
}
public int getAge() {
return age;
}
public void setHome(String newhome) {
home=newhome;
}
public String getHome() {
return home;
}
public Eighty() {
}
public Eighty(String newname) {
name=newname;
// age=newage;
// home=newhome;
}
public void tell() {
System.out.println("我叫"+name+",我家是"+home+"人,我今年"+age+"岁了");
}
}
public class Eightyb {
public static void main(String[] args) {
Eighty per=new Eighty("江南");
per.tell();
}
}
执行结果
我叫江南,我家是null人,我今年0岁了
编写顺序:构造方法重载时,所有重载的方法按照参数的个数由多到少,或者由少到多排列。
构造方法可以在堆内存开辟的同时进行对象实例化处理,这样即便没有栈内存指向,该对象也可以使用一次,而对于这种没有指向的对象就称为匿名对象。
匿名对象的最大特点是使用一次就丢掉了。
范例:使用匿名对象进行操作
public class Eightyb {
public static void main(String[] args) {
new Eighty("江南",20,"浙江").tell();;
}
}
执行结果
我叫江南,我家是浙江人,我今年20岁了
范例:使用构造方法接受引用数据类型
public class Eightytwo_a {
private String info;
public void setInfo(String info) {
this.info=info;
}
public String getInfo() {
return info;
}
public Eightytwo_a() {
}
public Eightytwo_a(String tempinfo) {
info=tempinfo;
}
}
public class Eightytwo_b {
private String name;
private int age;
public void setName(String tempname) {
name= tempname;
}
public String getName() {
return name;
}
public void setAge(int tempage) {
age=tempage;
}
public int getAge() {
return age;
}
public void tell() {
System.out.println("姓名"+name+",年龄"+age);
}
public Eightytwo_b() {
}
public Eightytwo_b(int tempage,Eightytwo_a msg) {
age=tempage;
name=msg.getInfo();
}
public Eightytwo_a getEightytwo_a() {
return new Eightytwo_a("姓名"+name+",年龄"+age);
}
}
public class Eightytwo_c {
public static void main(String[] args) {
Eightytwo_a msg=new Eightytwo_a("藏三");
Eightytwo_b per=new Eightytwo_b(20,msg);
per.tell();
msg=per.getEightytwo_a();
System.out.println(msg.getInfo());
}
}
执行结果
姓名藏三,年龄20
姓名藏三,年龄20
构造方法接受一个类对象,为name赋值,