java 构造方法使用 和 this

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个数由多到少,或者是由少到多排列的.
在定义顺序为:首先定义属性,之后定义构造方法,最后定义普通方法.
看到这的话点个赞呗 谢谢.
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值