java构造函数_[ Java学习基础 ] Java构造函数

本文介绍了Java构造函数的基本概念,包括构造方法的特点、默认构造方法、构造方法重载和封装。通过示例代码详细讲解了如何使用和定义构造方法,并提到了初始化块与构造函数的执行顺序。
摘要由CSDN通过智能技术生成

构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用。

Java构造方法的特点如下:

构造方法名必须与类名相同。

构造方法没有任何返回值,包括void。

构造方法只能与new运算符结合使用。

示例代码如下:

1 //Rectangle.java文件

2 packagecom.a51work6;3

4 //矩形类

5 public classRectangle {6

7 //矩形宽度

8 intwidth;9 //矩形高度

10 intheight;11 //矩形面积

12 intarea;13

14 //构造方法

15 public Rectangle(int w, inth) {16 width =w;17 height =h;18 area =getArea(w, h);19 }20 ...21 }

代码第15行是声明了一个构造方法,其中有两个参数w和h,用来初始化Rectangle对象的两个成员变量width和height,注意前面没有任何的返回值。

默认构造方法

有时在类中根本看不到任何的构造方法。例如本节中User类代码如下:

1 //User.java文件

2 packagecom.a51work6;3

4 public classUser {5

6 //用户名

7 privateString username;8

9 //用户密码

10 privateString password;11

12 }

从上述User类代码,只有两个成员变量,看不到任何的构造方法,但是还是可以调用无参数的构造方法创建User对象,因为Java虚拟机会为没有构造方法的类,提供一个无参数的默认构造方法,默认构造方法其方法体内无任何语句,默认构造方法相当于如下代码:

//默认构造方法

publicUser() {

}

默认构造方法的方法体内无任何语句,也就不能够初始化成员变量了,那么这些成员变量就会使用默认值,成员变量默认值是与数据类型有关。

构造方法重载

在一个类中可以有多个构造方法,它们具体有相同的名字(与类名相同),参数列表不同,所以它们之间一定是重载关系。

构造方法重载示例代码如下:

1 //Person.java文件

2 packagecom.a51work6;3

4 importjava.util.Date;5

6 public classPerson {7

8 //名字

9 privateString name;10 //年龄

11 private intage;12 //出生日期

13 privateDate birthDate;14

15 public Person(String n, inta, Date d) {16 name =n;17 age =a;18 birthDate =d;19 }20

21 public Person(String n, inta) {22 name =n;23 age =a;24 }25

26 publicPerson(String n, Date d) {27 name =n;28 age = 30;29 birthDate =d;30 }31

32 publicPerson(String n) {33 name =n;34 age = 30;35 }36

37 publicString getInfo() {38 StringBuilder sb = newStringBuilder();39 sb.append("名字: ").append(name).append('\n');40 sb.append("年龄: ").append(age).append('\n');41 sb.append("出生日期: ").append(birthDate).append('\n');42 returnsb.toString();43 }44 }

上述代码Person类代码提供了4个重载的构造方法,如果有准确的姓名、年龄和出生日期信息,则可以选用代码第15行的构造方法创建Person对象;如果只有姓名和年龄信息则可选用代码第21行的构造方法创建Person对象;如果只有姓名和出生日期信息则可选用代码第26行的构造方法创建Person对象;如果只有姓名信息则可选用代码第32行的构造方法创建Person对象。

Tips:如果在类中添加了带参的构造函数,系统就不会在自动生成无参的构造函数,所以建议添加带参数的构造函数后,再手动添加一个默认无参的构造函数。

构造方法封装

构造方法也可以进行封装,访问级别与普通方法一样,构造方法的访问级别参考[ Java学习基础 ] Java的封装性与访问控制中图所示。示例代码如下:

1 //Person.java文件

2 packagecom.a51work6;3

4 importjava.util.Date;5

6 public classPerson {7

8 //名字

9 privateString name;10 //年龄

11 private intage;12 //出生日期

13 privateDate birthDate;14

15 //公有级别限制

16 public Person(String n, inta, Date d) {17 name =n;18 age =a;19 birthDate =d;20 }21

22 //默认级别限制

23 Person(String n, inta) {24 name =n;25 age =a;26 }27

28 //保护级别限制

29 protectedPerson(String n, Date d) {30 name =n;31 age = 30;32 birthDate =d;33 }34

35 //私有级别限制

36 privatePerson(String n) {37 name =n;38 age = 30;39 }40

41 ...42 }

上述代码第16行是声明公有级别的构造方法。代码第23行是声明默认级别,默认级别只能在同一个包中访问。代码第29行是保护级别的构造方法,该构造方法在同一包中与默认级别相同,在不同包中可以被子类继承。代码第36行是私有级别构造方法,该构造方法只能在当前类中使用,不允许在外边访问,私有构造方法可以应用于单例设计模式等设计。

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

初始化块和构造函数的执行顺序

读者可先自行阅读下面代码,判断输出结果:

1 class B extendsObject2 {3 static

4 {5 System.out.println("Load B");6 }7 publicB()8 {9 System.out.println("Create B");10 }11 }12 class A extendsB13 {14 static

15 {16 System.out.println("Load A");17 }18 publicA()19 {20 System.out.println("Create A");21 }22 }23

24 public classTestclass25 {26 public static voidmain(String [] args)27 {28 newA();29 }30 }

输出结果:

Load B

Load A

Create B

Create A

初始化块在构造器执行之前执行,类初始化阶段先执行最顶层父类的静态初始化块,依次向下执行,最后执行当前类的静态初始化块;创建对象时,先调调用顶层父类的构造方法,依次向下执行,最后调用本类的构造方法 。所以执行顺序为:父类静态代码 -> 子类静态代码块 -> 父类构造代码块 -> 父类构造函数 -> 子类构造代码块 -> 子类构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值