java constructor 方法_Java构造器(构造方法/constructor)

我们先来看一下什么是构造器:

1、构造器也叫构造方法或构造函数,分为有参构造器和无参构造器;

2、构造器也是一种方法,只不过是一种特殊的方法,它会在对象创建的时候被调用;

3、构造器最大的作用就是在创建对象的时候进行对象的初始化,有参构造器可以实现对象传参(后面会比较着来看有参构造器方便在哪儿了);

4、一个类可以有零个(如果没有自己定义编译器会帮你提供无参构造器)或多个构造器(【重载】不知道重载定义的小伙伴可以先记下概念);

5、构造器不能被子类继承,Java中子类会自动调用父类的构造器(同样,不了解的可以先记下概念或者跳过)

前面既然说了构造器是一种特殊的方法,我们就来看一下构造方法和普通方法的区别:

1、命名:构造器的方法名必须和类名相同,一般方法的方法名在命名规范的情况下可以随便定义。

2、修饰符:构造器不能被static、final、synchronized、abstract和native修饰

3、返回值:构造器没有返回值(但是不需要写void),一般方法要有返回值或者无返回值(void)

来看一下无参构造器的代码,同时看一下无参构造器的情况下(不定义构造器同理)是如何给属性赋值的:

1 packagetest;2

3 public classStudent01 {4 //定义属性

5 publicString name;6 public intage;7 publicString sex;8

9 /**

10 * 无参的构造方法:11 * 如果不写编译器会自动加上;只要定义了构造器,不管是有参还是无参,编译器都不会再帮你定义12 */

13 public Student01() {//new对象的时候会调用这个无参构造方法,它会给new出来的对象一个初始化值(了解即可:数字为 0,字符为 null,布尔为 false,所有引用都是 null)

14 System.out.println("创建对象的过程中调用我了,在s1.name = ‘张三’;前执行,所以我在main方法的打印语句前打印");15 }16

17 public static voidmain(String[] args) {18 Student01 s1 = new Student01();//执行这一步的时候会自动调用Student01()19 //通过 对象.属性来给属性赋值

20 s1.name = "张三";21 s1.age = 18;22 s1.sex = "男";23 System.out.println("姓名:"+s1.name+"\n性别:"+s1.sex+"\n年龄:"+s1.age);24 }25

26 }

结果:

创建对象的过程中调用我了,在s1.name = ‘张三’;前执行,所以我在main方法的打印语句前打印

姓名:张三

性别:男

年龄:18

再来看有参构造器(给属性赋值不用再一个一个通过对象.属性)

1 packagetest;2

3 public classStudent02 {4 //定义属性

5 publicString name;6 public intage;7 publicString sex;8

9 //定义有参构造方法

10 public Student02(String name, int age, String sex) { //类似于普通带参方法 public void add(int a,int b){}

11 this.name =name; //将形参变量的值,赋给成员变量。 this指当前对象,这里不会的小伙伴不用慌它们的意思是:12 this.age =age; //拿name来举例this.name =name;就是将下面传过来的name值(张翠花)赋值给上面定义属性的(publicString name;)name13 this.sex =sex;14 }15

16 public static voidmain(String[] args) {17 Student02 s2 = new Student02("张翠花", 18, "女");//调用构造器的时候传参(改变默认初始化),类似于调用普通带参方法 add(1,1);

18 System.out.println("姓名:"+s2.name+"\n性别:"+s2.sex+"\n年龄:"+s2.age);19 }20

21 }

构造器不只可以定义一个,可以是零个(以前创建对象没写构造器的时候)或多个

1 packagetest;2

3 public classStudent02 {4 //定义属性

5 publicString name;6 public intage;7 publicString sex;8

9 //定义有参构造方法

10 public Student02(String name, int age, String sex) { //类似于普通带参方法 public void add(int a,int b){}

11 this.name =name;12 this.age =age;13 this.sex =sex;14 }15

16 //定义无参构造方法

17 publicStudent02() {18

19 }20

21 //定义一个两个参数的构造方法(重载)不能和刚才的一样 注意:名字依然要和类名保持一致

22 publicStudent02(String name, String sex){23 this.name =name;24 this.sex =sex;25 }26

27 public static voidmain(String[] args) {28 Student02 s2 = new Student02("张翠花", 18, "女");//调用构造器的时候传参,类似于调用普通带参方法 add(1,1);

29 System.out.println("姓名:"+s2.name+"\n性别:"+s2.sex+"\n年龄:"+s2.age);30

31 System.out.println("---------------------");32

33 //创建一个新的对象

34 Student02 s3 = new Student02("石榴姐", "女");//这里可以用前面三个构造器的任意一个

35 System.out.println("姓名:"+s3.name+"\n性别:"+s3.sex+"\n年龄:"+s3.age);36 //因为这里用的是没有给年龄传值的构造器,所以打印的年龄是初始值0

37 }38

39 }

结果:

姓名:张翠花

性别:女

年龄:18

---------------------

姓名:石榴姐

性别:女

年龄:0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值