1.了解构造方法之前,我们先了解一下下面的格式
类名称 对象名称=new 类名称();
**类名称:**要定义对象数据类型;
**对象名称:**日后进行类属性或方法操作的标记变量;
**new:**开辟堆内存空间;
**类名称()😗*表示要实例化对象,加上“()”都应该属于方法,即在类中应该提供一个和类名称相同的方法,而此处实际上就表示调用了类中的构造方法,那么此时我们可以发现构造方法和普通的方法不太一样的地方;构造方法就是在实例化对象时使用,而普通方法是在实例化对象产生后使用的.
2.在java中,定义构造方法要求:
构造方法的名称和类名称保持一致;
构造方法不允许由返回值类型声明;
对象实例化操作一定需要构造方法的存在,所以如果在类之中没有明确定义构造方法的话,则会自动生成一个无参、无返回值的构造方法提供给用户使用.如果一个类已经明确定义了一个构造方法的话,则无实际意义的构造方法不会自动生成,也就是说,一个类之中至少存在一个构造方法.
3.默认情况下会存在一个无参的构造方法.
class Person{ //类名首字母大写
public Person(){ //无参无返回值的方法
}
在一个类对象实例化的过程之中,一定要调用构造方法,而且一个对象只能够调用一次类的构造方法.当然,在类中也可以明确定义一个构造方法,通过构造方法为类中的属性初始化.
4.下面定义又参数的构造方法
package lesson11;
class Person3{ //类名称首字母大写
private String name; //属性封装
private int age; //属性封装
public Person3(String n,int a){ //通过构造方法赋值
setName(n); //设置name属性内容
setAge(a); //设置age属性内容
}
void setName(String n){ //setter:设置name属性内容
name =n;
}
void setAge(int a){ //setter:设置age属性内容
if(a>0 && a<250){ //增加检查
age=a;
}
}
public String getName() { //getter:取得name属性内容
return name;
}
public int getAge() { //getter:取得age属性内容
return age;
}
public void tell(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class TestDeamo13 {
public static void main(String[] args) {
Person3 person=new Person3("芷若",18); //声明并实例化对象
person.tell(); //对象.方法()
}
}
运行结果
在类中定义了一个可以接受两个参数的构造方法,这样实例化Person3类时就必须通过构造方法传递指定的参数,而不需要通过"对象.setter"进行属性的设置了.
5.可以使用"this.()方法",表示调用本类的方法.
如果现在要强调所调用的方法是本类中所定义的方法,可以在方法前增加一个this.从实际代码编写,建议在调用本类方法前都加上"this",这样可以使代码更加清晰.
public Person(String n,int a){//通过构造方法赋值
this.setName(n);
this.steAge(a);
}
方法的重载我们见面讲过了
6.构造方法虽然定义形式特殊,但是本质依然属于方法,所以构造方法也可以进行重载,不过构造方法重载时候只需要考虑参数的类型及其个数,并且方法名称一定要和类名称保持一致。
通过代码进行讲解
package lesson11;
class Person3{ //类名称首字母大写
private String name; //属性封装
private int age; //属性封装
public Person3(){ //无参数构造方法
}
public Person3(String name){ //一个参数的构造方法
this.setName(name);
}
public Person3(String n,int a){ //两个构造方法
setName(n); //设置name属性内容
setAge(a); //设置age属性内容
}
void setName(String n){ //setter:设置name属性内容
name =n;
}
void setAge(int a){ //setter:设置age属性内容
if(a>0 && a<250){ //增加检查
age=a;
}
}
public String getName() { //getter:取得name属性内容
return name;
}
public int getAge() { //getter:取得age属性内容
return age;
}
public void tell(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class TestDeamo13 {
public static void main(String[] args) {
Person3 person=new Person3("芷若"); //声明并实例化对象
person.tell(); //对象.方法()
}
}
运行结果
在本程序中定义了3个构造方法(重载),而后在主类实例化对象调用了有一个参数的构造,所以会为name属性赋值,而age为其默认值为0.
类中定义属性的默认值,只有构造方法执行完毕后(不是构造方法)才可以真正赋值.
编译规范:在对对类中构造方法重载时,所有方法都是按照参数的1个数由多到少,或者是由少到多排列的.
在定义顺序为:首先定义属性,之后定义构造方法,最后定义普通方法.
看到这的话点个赞呗 谢谢.
来源:CSDN
作者:morning to afternoon
链接:https://blog.csdn.net/ysy_1_2/article/details/104130920