千锋教育-做有情怀、有良心、有品质的IT职业教育机构

400-811-9990
当前位置:千锋视频教程 >  Java视频教程  >  Java基础教程之构造方法

Java基础教程之构造方法

时间:2018-08-23 15:36     来源:千锋教育 作者:千锋Java

  在前面的例题中创建对象时,会默认为成员变量进行初始化。例如造车厂,刚生产的同类型车的默认配置都是一样的。如果想改变默认的初始化,让系统创建对象时就为该对象的成员属性显式地指定初始值,可以通过构造方法来实现。构造方法是类中一个特殊的成员方法,用于为类中属性初始化。

  构造方法的定义

  构造方法是在创建一个对象使用new关键字时被调用的。构造方法有三个特征:

  构造方法名与类名相同。

  构造方法没有返回值类型。

  构造方法中不能使用return返回一个值。

  接下来演示定义一个类的构造方法,如例4-1所示。

  例4-1 TestPersonDemo04.java

  1 class Person {

  2 public Person() {

  3 System.out.println("构造方法自动被调用");

  4 }

  5 }

  6 public class TestPersonDemo04 {

  7 public static void main(String[] args) {

  8 System.out.println("声明对象:Person p = null");

  9 Person p = null; // 声明对象时不调用构造方法

  10 System.out.println("实例化对象:p = new Person()");

  11 p = new Person(); // 实例化对象时调用构造方法

  12 }

  13 }

  程序的运行结果如图4.1所示。

图片1

  图4.1 例4-1运行结果

  图4.1中,从程序运行结果可发现,当调用关键字new实例化对象时才会调用构造方法。细心的读者会发现,在之前的示例中并没有定义构造方法,但是也能被调用。这是因为类未定义任何构造方法,系统会自动提供一个默认构造方法,又称缺省构造方法。如果已存在带参数的构造方法,则系统将不会提供缺省构造方法,如例4-2所示。

  例4-2 TestPersonDemo05.java

  1 class Person {

  2 private String name; // 声明姓名私有属性

  3 private int age; // 声明年龄私有属性

  4 public Person(String str, int n) { // 构造方法初始化成员属性

  5 name = str;

  6 age = n;

  7 }

  8 public void say() { // 定义显示信息的方法

  9 System.out.println("姓名:"+name+",年龄:"+age);

  10 }

  11 }

  12 public class TestPersonDemo05 {

  13 public static void main(String[] args) {

  14 Person p = new Person();

  15 p.say();

  16 }

  17 }

  程序的运行结果如图4.12所示。

图片2

  图4.2 例4-2运行结果

  图4.2中编译报错,并提示“实际参数列表和形式参数列表长度不同”,出现错误的原因在于,类中已经提供有参数的构造方法,系统将不会提供缺省构造方法,编译器因找不到无参构造方法而报错。修改第14行代码如下:

  Person p = new Person("张三", 18);

  程序的运行结果如图4.3所示。

图片3

  图4.3 例4-2修改后运行结果

  图4.3中,从程序运行结果可发现,实例化对象时调用了有参构造方法为属性赋值。编写程序时,为避免出现上面的错误,每次定义类的构造方法时,预先定义一个无参的构造方法,有参的构造方法可以根据需求再定义。

  构造方法的重载

  由于系统提供的默认构造方法通常不能满足需求,例如,造车厂生产卡车与小轿车时,出厂的配置是不一样的,这时就需要多个构造方法,与普通方法一样,只要每个构造方法的参数列表不同,即可实现重载。这样在创建对象时,就可以通过调用不同的构造方法为不同的属性赋值,如例4-3所示。

  例4-3 TestPersonDemo06.java

  1 class Person {

  2 private String name; // 声明姓名私有属性

  3 private int age; // 声明年龄私有属性

  4 public Person(String str) {

  5 name = str;

  6 }

  7 public Person(String str, int n) { // 构造方法初始化成员属性

  8 name = str;

  9 age = n;

  10 }

  11 public void say() { // 定义显示信息的方法

  12 System.out.println("姓名:"+name+",年龄:"+age);

  13 }

  14 }

  15 public class TestPersonDemo06 {

  16 public static void main(String[] args) {

  17 // 创建对象并调用一个参数构造方法

  18 Person p1 = new Person("张三");

  19 // 创建对象并调用两个参数构造方法

  20 Person p2 = new Person("李四", 18);

  21 p1.say();

  22 p2.say();

  23 }

  24 }

  程序的运行结果如图4.4所示。

图片4

  图4.4 例4-3运行结果

  例4-3中,Person类中定义了两个构造方法,两个方法的参数列表不同,符合重载条件。在创建对象时,根据参数的不同,分别调用不同的构造方法。其中,一个参数的构造方法只对name属性进行初始化,此时age属性为默认值0;两个参数的构造方法根据实参分别对nane和age属性进行初始化。

  学习java开发,可以参考千锋提供的java学习路线,该学习路线罗列了各阶段完整的java学习知识,根据千锋提供的java学习路线图结合千锋java视频教程,可以让你对学好java开发需要掌握的知识有个清晰的了解,并能快速入门java开发。

  • 北京天丰利校区(总部)地址:北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术学院广场服务楼2、3层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 深圳西部硅谷校区地址:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619
    深圳大学城校区地址:深圳市南山区留仙大道1201号大学城创客小镇16栋3楼
    咨询电话: 0755-23015275/23015546-801(硅谷) 0755-86660670-801(大学城)
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 上海校区地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-811-9990 021-65233829-609
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 郑州校区地址:郑州市二七区航海中路60号海为科技园C区10层、12层
    咨询电话:0371-55191750
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 广州校区地址:广州市天河区元岗路200号慧通产业园B9三层
    咨询电话:020-38035223 020-38035220
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 大连校区地址:辽宁省大连市高新园区爱贤街10号大连设计城A座901
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 武汉金融港校区地址:武汉市东湖高新技术开发区光谷大道77号金融港B18栋3楼
    武汉智慧园校区地址:武汉市东湖高新技术开发区光谷大道61号智慧园21栋2楼
    咨询电话:027-59313371
    面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、 Unity游戏开发培训、360网络安全、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训
  • 成都校区地址:成都市武侯区科华北路62号力宝大厦N(北楼)18楼
    咨询电话:400-811-9990 028-83178771
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 西安校区地址:西安市雁塔区高新六路52号立人科技C座西区4楼
    咨询电话:029-85363390
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 杭州旺田校区:浙江省杭州市江干区九堡旺田书画城A座4层
    杭州龙驰校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层
    咨询电话:400-811-9990 0571-86893632/0571-86094032
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 青岛校区地址:青岛市市北区龙城路卓越世纪中心3号楼8层801
    咨询电话:0532-80911190
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 重庆校区地址:重庆市高新区科园一路2号大西洋国际12-1
    咨询电话:400-811-9990 023-68883009
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 长沙校区地址:湖南省长沙市岳麓区麓谷企业广场A2栋三单元306号
    咨询电话:0731-85513210
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 哈尔滨校区地址:哈尔滨市松北区创新一路699号 科技创新城19号楼B座五楼
    咨询电话:400-811-9990/0451-87173191
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 南京校区地址:南京市建邺区应天大街780号应天智汇产业园弘辉园1幢2楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、物联网+嵌入式培训、360网络安全、大数据+人工智能培训、全栈软件测试培训、PHP全栈+服务器集群培训、云计算+信息安全培训、Unity游戏开发培训、区块链、红帽RHCE认证、好程序员
  • 千锋教育服务号

    了解千锋动态
    关注千锋教育服务号

  • 千锋教育移动站

    扫一扫快速进入
    千锋移动端页面

  • 千锋互联服务号

    扫码匿名提建议
    直达CEO信箱