爪哇构造函数
建设者
在Java中是代码块,可让您创建 目的。它没有返回类型。
它有两个要点
- 构造函数名称应与类相同
- 构造函数不应具有任何返回类型,否则它将与method相同。
爪哇中有三种构造函数。
- 默认构造函数
- 没有arg构造函数
- 参数化构造函数
如何调用构造函数?
要调用构造函数,您需要使用关键字new,其后是类的名称,然后是参数(如果有)。
例如:如果要创建Employee类的对象,则可以这样调用构造函数: 新 雇员()
建设者的类型
默认构造函数:
当您不为类提供构造函数时,JVM将创建 默认构造函数它对您不可见,JVM将在初始化类的对象时自动创建它。
让’s以示例为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
包 组织.Arpit.爪哇2blog; 上市 类 雇员 { 串 名称; 整型 年龄; 上市 虚空 workOnAssignment() { //处理作业 } 上市 串 getName() { 返回 名称; } 上市 虚空 setName(串 名称) { 这个.名称 = 名称; } 上市 整型 getAge() { 返回 年龄; } 上市 虚空 setAge(整型 年龄) { 这个.年龄 = 年龄; } 上市 静态的 虚空 主要(串 args[]) { 雇员 e1=新 雇员(); e1.setName(“约翰”); e1.setAge(20); 系统.出.打印(e1.getName()); 系统.出.打印(e1.getAge()); } } |
如您所见,我们没有为此类提供任何构造函数,但 虚拟机 在这种情况下将创建默认构造函数。
当您运行上述程序时,将获得以下输出:
没有arg建设者
no arg constructor
是您在该类中显式提供的构造函数,它没有任何参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
包 组织.Arpit.爪哇2blog; 上市 类 雇员 { 串 名称; 整型 年龄; 上市 雇员() { 系统.出.打印(“不调用arg构造函数”); } 上市 虚空 workOnAssignment() { //处理作业 } 上市 串 getName() { 返回 名称; } 上市 虚空 setName(串 名称) { 这个.名称 = 名称; } 上市 整型 getAge() { 返回 年龄; } 上市 虚空 setAge(整型 年龄) { 这个.年龄 = 年龄; } 上市 静态的 虚空 主要(串 args[]) { 雇员 e1=新 雇员(); e1.setName(“约翰”); e1.setAge(20); 系统.出.打印(e1.getName()); 系统.出.打印(e1.getAge()); } } |
当您调用上述程序时,将获得以下输出:
约翰
20
参数化构造函数
When you pass arguments to the constructor, 这个 type of constructor is called 参数化构造函数
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
包 组织.Arpit.爪哇2blog; 上市 类 雇员 { 串 名称; 整型 年龄; 上市 雇员(串 名称,整型 年龄) { 系统.出.打印(“调用参数化构造函数”); 这个.名称=名称; 这个.年龄=年龄; } 上市 虚空 workOnAssignment() { //处理作业 } 上市 串 getName() { 返回 名称; } 上市 虚空 setName(串 名称) { 这个.名称 = 名称; } 上市 整型 getAge() { 返回 年龄; } 上市 虚空 setAge(整型 年龄) { 这个.年龄 = 年龄; } 上市 静态的 虚空 主要(串 args[]) { 雇员 e1=新 雇员(“约翰”,20); 系统.出.打印(e1.getName()); 系统.出.打印(e1.getAge()); } } |
当您运行上述程序时,将获得以下输出:
约翰
20
如果提供参数化构造函数,则需要小心。
让’s see below program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
包 组织.Arpit.爪哇2blog; 上市 类 雇员 { 串 名称; 整型 年龄; 上市 雇员(串 名称,整型 年龄) { 系统.出.打印(“调用参数化构造函数”); 这个.名称=名称; 这个.年龄=年龄; } 上市 虚空 workOnAssignment() { //处理作业 } 上市 串 getName() { 返回 名称; } 上市 虚空 setName(串 名称) { 这个.名称 = 名称; } 上市 整型 getAge() { 返回 年龄; } 上市 虚空 setAge(整型 年龄) { 这个.年龄 = 年龄; } 上市 静态的 虚空 主要(串 args[]) { 雇员 e1=新 雇员(); e1.setName(“约翰”); e1.setAge(20); 系统.出.打印(e1.getName()); 系统.出.打印(e1.getAge()); } } |
如果您注意到,您将在第38行收到编译错误。为什么这样?
因为如果您在类中创建参数化的构造函数,JVM将会赢得’向您提供默认构造函数。如果您不编写任何构造函数,那么只有JVM将为您提供默认的构造函数。
构造器链
构造器链
是子类在内部或显式调用其父类的构造函数的概念。
每当在Java中创建对象时,都会调用其超类构造函数。编译器只是在内部将super()放入构造函数中。
让’借助示例查看:
让’s say you have 人 类 with attribute 名称 and you have child 类 名称d 雇员
which 延伸 人
类.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
包 组织.Arpit.爪哇2blog; 上市 类 人 { 串 名称; 上市 人() { 系统.出.打印(“呼叫人构造函数”); 名称=“约翰”; } } 类 雇员 延伸 人{ 整型 年龄; 上市 雇员() { 系统.出.打印(“调用Employee类的构造函数”); 名称="马丁"; } 上市 虚空 workOnAssignment() { //处理作业 } 上市 串 getName() { 返回 名称; } 上市 虚空 setName(串 名称) { 这个.名称 = 名称; } 上市 整型 getAge() { 返回 年龄; } 上市 虚空 setAge(整型 年龄) { 这个.年龄 = 年龄; } 上市 静态的 虚空 主要(串 args[]) { 雇员 e1=新 雇员(); 系统.出.打印(e1.getName()); } } |
当您运行上述程序时,将获得以下输出:
调用Employee类的构造函数
马丁
如您所见,First 人构造函数被调用,并将name变量设置为 约翰
Then 雇员 constructor got called which have overridden 名称 变量 to 马丁
.
那’s why we see a 变量 命名为"Martin" in the end.
如果要显式调用超类参数化构造函数该怎么办
您可以轻松地使用 超级关键字.
让’可以在Example的帮助下进行查看。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
包 组织.Arpit.爪哇2blog; 上市 类 人 { 串 名称; 上市 人(串 名称) { 这个.名称=名称; 系统.出.打印(“调用人参数化构造函数”); } } 类 雇员 延伸 人{ 整型 年龄; 上市 雇员(串 名称) { 超(名称); 系统.出.打印(“调用Employee类的构造函数”); } 上市 虚空 workOnAssignment() { //处理作业 } 上市 串 getName() { 返回 名称; } 上市 虚空 setName(串 名称) { 这个.名称 = 名称; } 上市 整型 getAge() { 返回 年龄; } 上市 虚空 setAge(整型 年龄) { 这个.年龄 = 年龄; } 上市 静态的 虚空 主要(串 args[]) { 雇员 e1=新 雇员(“约翰”); 系统.出.打印("雇员's 名称:"+e1.getName()); } } |
当您运行上述程序时,将获得以下输出:
调用Employee类的构造函数
雇员’s 名称:John
如果要调用同一类的另一个构造函数怎么办
If you want to call overloaded constructor
of same 类, you can use 这个关键字 to do 那.
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
包 组织.Arpit.爪哇2blog; 上市 类 雇员 { 串 名称; 整型 年龄; 上市 雇员() { 系统.出.打印(“调用无参数构造函数”); } 上市 雇员(串 名称,整型 年龄) { 这个(); 系统.出.打印(“调用参数化构造函数”); 这个.名称=名称; 这个.年龄=年龄; } 上市 虚空 workOnAssignment() { //处理作业 } 上市 串 getName() { 返回 名称; } 上市 虚空 setName(串 名称) { 这个.名称 = 名称; } 上市 整型 getAge() { 返回 年龄; } 上市 虚空 setAge(整型 年龄) { 这个.年龄 = 年龄; } 上市 静态的 虚空 主要(串 args[]) { 雇员 e1=新 雇员(“约翰”,20); 系统.出.打印("雇员's 名称 : "+e1.getName()); 系统.出.打印("雇员's 年龄 : "+e1.getAge()); } } |
当您运行上述程序时,将获得以下输出:
调用参数化构造函数
雇员’s 名称 : 约翰
雇员’s 年龄 : 20
请注意,用于调用重载构造函数的此关键字应是该构造函数中的第一条语句。
那’关于Java构造函数的所有内容。