构造方法是什么

构造方法不同于普通方法,普通方法代表对象的行为,而构造方法是提供给系统用于创建对象的方法

构造方法(也称为构造函数)是一种特殊的方法,它具有以下特点。

1. 构造方法的方法名必须与类名相同。
2. 构造方法没有返回类型,在方法名前不声明返回类型(包括 void)。

构造方法的语法形式如下。

[访问修饰符] 类名([参数列表]) ;

虽然构造方法在语法形式上没有返回类型,但其实构造方法是有返回值的,返回的是刚刚被初始化完成的当前对象的引用。既然构造方法返回被初始化对象的引用,为什么不写返回值类型呢?例如 Student 类构造方法为什么不写成 public Student Student(参数列表){…}呢?

因为 Java 设计人员把这种方法名(类名)和返回类型的类名相同的方法看成一个普通方法,只是名称“碰巧”相同罢了,编译器识别时也会认为它是一个方法。为了和普通方法进行区别,Java 设计人员规定构造方法不写返回值,编译器通过这一规定识别构造方法,而不是说构造方法真的没有返回值。

this关键字

this 是 Java 的一个关键字,它表示“指向当前对象的引用(后文简称为‘当前对象’)”。举个例子,在前面小节中给 stuAge 属性赋值的语句是wangYun.setStuAge(22);,这条语句中的当前对象就是 wangYun,因此在 setStuAge()方法中 this 就是 wangYun。

在实际开发时,this 通常用于以下两个场景。

  1. 区分成员变量和局部变量,避免命名的烦恼。
  2. 调用其他构造方法。

是否可以将参数 age,和成员变量 stuAge 设置为相同的名称,如下所示。

private int age ;
...
public void setAge(int age) {...
age = age ;
}

显然,编译器将无法区分age = age这句代码中哪个变量是成员变量,哪个变量是参数,因此我们之前就只能通过不同的变量名来区分。而现在,我们就可以通过 this 来区分不同的 age,如下所示。

private int age ;
...
public void setAge(int age) {...
this.age = age ;
}

在this.age = age ;这句代码中,因为 this 代表着当前对象,因此this.age就代表了当前对象的 age 属性;而age没有 this 修饰,就会根据变量的作用域,默认为方法参数中的 age

使用 this 关键字调用其他构造方法

我们再来看一下如何使用 this 调用其他构造方法。

在构造方法中,还可以使用 this 调用类中的其他构造方法,但这种this()语句必须写在构造方法的第一行,如下所示。

 public Student() {//调用有一个String参数的构造方法this(" WangYun" );}public Student(String name) {//调用有两个参数的构造方法this(name,23);}public Student(String name, int age) {...}

需要注意的是,所有的构造方法之间不能循环调用,否则会出现类似“死循环”的现象。例如以上代码,如果在最后一个构造方法的第一行也加上this(),那么三个构造方法就会无限制的彼此调用。


需要注意的是,构造方法有一个约定:如果在定义类时没有定义构造方法,编译系统会自动插入一个无参数的默认构造方法,这个构造方法不执行任何代码。如果在定义类时定义了有参的构造方法,没有显式地定义无参的构造方法,那么在使用构造方法创建类对象时,则不能使用默认的无参构造方法

重载

在同一个类中,可以有两个或两个以上的方法具有相同的方法名,但它们的参数列表不同。这种形式被称为重载(overload)。所谓参数列表不同包括以下三种情形。

1. 参数的数量不同。
2. 参数的类型不同。
3. 参数的顺序不同。

必须注意的是,仅返回值不同不能视为方法重载,还会得到一个语法错误。而且重载的方法之间只是“碰巧”名称相同罢了,不具备连带效应。既然方法名称相同,在使用相同的名称调用方法时,编译器怎么确定调用哪个方法呢?这就要靠传入参数的不同确定具体调用哪个方法

注意,一个类的多个构造方法被视为重载,因为多个构造方法的方法名相同,而参数列表不同,符合重载的定义。


6.3 构造方法和this关键字及重载相关推荐

  1. JavaScript - 构造方法和this关键字使用

    <html><head><head><body><script language="javascript">// 构造方 ...

  2. 二、OC的构造方法和descriprtion方法

    二.构造方法和description方法 1.构造方法的定义 - (id)initWithAge:(int)newAge andNo:(int)newNo; 2.实现构造方法 - (id)initWi ...

  3. JavaSE学习之路:Idea小技巧一键生成标准JavaBean(一键生成构造方法和Setter和Getter方法)

    Idea小技巧一键生成标准JavaBean(一键生成构造方法和Setter和Getter方法) 方法1:快捷键 快捷键:alt+insert或alt+fn+insert 1.生成有参和无参构造函数 p ...

  4. IOS开发基础Object-C( 04)—构造方法和description方法

    在上一篇博客中,我们简单介绍了一下点语法和self,相信大家对点语法以及self有了一点的了解,点语法的本质就是调用get方法和set方法.那么今天我们再来介绍一下构造方法和description. ...

  5. 构造器初始化(三):巧用Static方法和base关键字

    using System; using System.Collections.Generic; using System.Linq; using System.Text;//如何运行前不知道的值传递给 ...

  6. StringBuilder的构造方法和append方法

    package com.learn.demo06StringBuilder; /*StringBuilder的常用方法:public StringBuilder append(...):添加任意类型数 ...

  7. python类的构造方法和assert的使用,用MethodType动态绑定类方法

    一.通过__init__构造方法赋值 import types class C:sex = 'male'def __init__(self, age):self.age = agedef show(s ...

  8. C#中的委托,匿名方法和Lambda表达式

    简介在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个Firs ...

  9. apply方法和unapply方法

    apply方法和unapply方法 appply方法 通常,在一个类的伴生对象中定义apply方法,在生成这个类的对象时,就省去了new关键字. 请看下面代码: class Foo(foo:Strin ...

最新文章

  1. 升级nginx以支持http2的方法
  2. 06_MyBatis,Spring,SpringMVC整合
  3. 比较windows phone程序启动和android程序启动原理
  4. 亲自实践Blazor构建桌面应用程序
  5. 工作387-vant控制日期范围
  6. 基于python的个人博客系统的设计开题报告_个人博客设计实现开题报告
  7. ViewPager——基础知识和PagerAdapter必须重写的四个方法
  8. 组素数 蓝桥填空题2013省赛
  9. iOS10 Xcode 8 中provisioning file 相关bug
  10. 转:孩子,上学去!乖
  11. python storm连接mysql_python ORM storm中的复合外键引用
  12. 一加手机怎么导出照片_批处理整理安卓手机微信导出的视频和照片
  13. 研究方法、技术路线、实验手段、关键技术区别和联系
  14. 用小程序做问卷调查,获取数据就是这么简单!
  15. Kopernio插件+SCI-HUB最新可用网址
  16. 音视频技术开发周刊 | 164
  17. java课设的总结和体会,JAVA设计培训心得体会【两篇】
  18. c程序设计总结(红皮书+真题)
  19. 千里马Android Framework-input系统专题blog目录集合
  20. 计算机3d影视的应用程序,计算机3D技术在电影中的应用

热门文章

  1. ensp配置USG5500防火墙
  2. Windows下搭建GitHub Pages
  3. 油液磨粒监测设计方案
  4. Python学生公寓管理系统的设计与实现 毕业设计-附源码181047
  5. 解密由加密大师加密的文件
  6. HTC G13软解和ROOT
  7. 游戏音乐制作中如何与玩家产生交互?
  8. CSDN 访问、点赞、评论、积分、排名、专家、勋章、下载积分及其获取方法
  9. 图像检索中的相似度度量:EMD距离(Earth Mover's Distance)
  10. SUN T5220面板告警故障处理