上一篇博客小编已经给读者介绍了Java入门的类与对象,这一章节我们来了解一下构造方法,方法重载以及this关键字。

一:构造方法

Java中方法一般有2中:普通方法和构造方法。我们已经知道普通方法的声明格式为:

访问修饰符 返回值类型 方法名(数据类型 参数名,...){

方法体……

}

那么构造方法的声明格式又是怎样的呢?

访问修饰符 构造方法名(数据类型 参数名,...){

方法体……

}

上面就是构造方法的声明格式,通过对比我们发现2种方法有不同的地方,我们需要牢记一下几点:

1.构造方法在声明处没有返回值类型。因此,在构造方法的方法体中不能使用return语句来返回一个值。

2.构造方法的方法名必须与类名一致。也就是说构造方法名就是类名,不能是其他名字。

在上一节介绍类与对象中,实例化对象的格式为:

类名 对象名 = new 类名(参数值,...);

而在介绍了构造方法后,我们需要修改实例化对象的格式:

类名 对象名 = new 构造方法名(参数值,...);

也就是说,在实例化对象的过程中,我们调用了构造方法,将括号内的参数传到构造方法的方法体中,调用构造方法的作用是什么呢?既然实例化了一个对象 ,我们肯定希望给这个对象赋予一定的属性,调用构造方法的作用,就是给对象的属性设置初始值。

来看一个例子。我们创建一个Student类,在类中写一个构造方法,然后输出一行字:

public class Student {

private String name;//name这个属性设为private型,即只能在本类中被访问

//声明一个构造方法

public Student(String name) {

this.name = name;

System.out.println(this.name + "正在学习Java!");

}

}

在创建一个Manager类,用来创实例化一个Student类的对象:

public class Manager {

public static void main(String[] args) {

//实例化对象:类名 对象名 = new 构造方法名(参数值,...);

Student stu = new Student("张三");

}

}

在Manager类中实例化对象的时候,调用Student类中的构造方法Student(String name);并且将张三这个参数赋给name,然后执行构造方法中的代码,将name赋给this.name,接着输出一行字,输出结果为:

张三正在学习Java!

可以看到,我们在创建一个对象stu的时候,调用了构造方法,给对象的name属性设置了一个初始值:张三。

补充:如果没有在类中定义构造方法,那么JVM会默认给你提供一个构造方法(无参数的构造方法);如果你在类中定义了构造方法,则JVM不会提供默认的构造方法了。

二:方法重载

我们先创建一个Student类:

public class Student {

public String name;

public Student() {

System.out.println("无参数的构造方法");

}

public Student(String name) {

this.name = name;

System.out.println("有参数的构造方法");

}

}

然后创建一个Manager类,实例化对象:

public class Manager {

public static void main(String[] args) {

//类名 对象名 = new 构造方法名();

Student stu = new Student();

System.out.println(stu.name + "正在学习Java!");

//类名 对象名 = new 构造方法名(参数值,……);

Student stu2 = new Student("张三");

System.out.println(stu2.name + "正在学习Java!");

}

}

我们来看看代码执行的结果:

无参数的构造方法

null正在学习Java!

有参数的构造方法

张三正在学习Java!

读者一定有很多疑惑,让我们来分析分析为什么是这样的执行结果吧!

首先,在Java中,代码是从上往下执行的,即先执行上一行的语句,然后按顺序执行下面的语句。在Manager类中,我们先是创建了一个stu对象,根据刚刚介绍的构造方法的内容,在创建这个对象的时候,我们调用了Student类中的Student();这个构造方法,调用这个方法就要执行方法中的语句,所以输出"无参数的构造方法";

在创建stu对象的语句后面是一个输出语句,因此调用完Student()方法后,就会输出"null正在学习",为什么是null呢?因为Student()方法的括号没有参数,this.name并没有被赋值,因此输出null;

接着,我们又创建了一个stu2的对象,这里我们调用的是Student("张三");这个方法,因为括号内有一个参数值"张三",因此调用的是Student(String name)这个方法,并将"张三"赋给name,然后执行this.name = name;System.out.println("有参数的构造方法");因此输出"有参数的构造方法";创建stu2的语句后面又是一个输出语句,执行后输出为"张三正在学习Java!"。

在Student类中,我们声明了2个构造方法,这2个方法的方法名一致(都是Student),但是参数个数、参数类型不同(一个有参数,一个没有参数),我们把这叫做方法的重载。

概括的的说,方法重载有一下条件:

1.必须在同类中或者是有继承关系的类中;

2.方法名必须要完全一致;

3.方法所带的参数(参数个数、参数类型、参数顺序)必须要不同。

三:this关键字

在上面我们的this.name中我们已经看到了this关键字,那么为什么要用this关键字呢?

如果我们把代码this.name = name;改为name = name;那么Java系统无法判断哪一个是Student(String name)方法中的参数name,哪一个是属性name;因此需要加一个this.name来区分,this.name表示属性。

除此之外,this还有一个用途:用来调用当前类中中构造方法或者是普通方法。

调用构造方法的格式为:this(参数值,...);

调用普通方法的格式为:this.普通方法名(参数值,...);

this关键字到底表示的是谁呢?this表示当前调用方法的对象;如果是a对象在调用方法,那么方法中this就表示a对象。this就类似于生活中"我"这个词的意思。

java重载中this的作用_Java2:构造方法、方法重载和this关键字相关推荐

  1. Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法

    public static void main(String[] args) {} 或者 public static void main(String args[]) {} main方法是我们学习Ja ...

  2. java开发中遇到的问题及解决方法(持续更新)

    java开发中遇到的问题及解决方法(持续更新) 参考文章: (1)java开发中遇到的问题及解决方法(持续更新) (2)https://www.cnblogs.com/LiuYanYGZ/p/6112 ...

  3. java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法

    在Java系统中封装SQL语言的处理方法及系统的制作方法[ 技术领域: ][0001]本发明涉及计算机数据处理 技术领域: ,特别是涉及一种在Java系统中封装SQL语言的处理方法及系统.[ 背景技术 ...

  4. java用redis缓存的步骤_详解在Java程序中运用Redis缓存对象的方法|chu

    这段时间一直有人问如何在Redis中缓存Java中的List 集合数据,其实很简单,常用的方式有两种: 1. 利用序列化,把对象序列化成二进制格式,Redis 提供了 相关API方法存储二进制,取数据 ...

  5. 学习Java的第五天 | 定义方法 | 引用数据类型——类 | 访问权限-修饰符 | 全局变量与局部变量 | toString | 构造方法 | 方法重载

    前面提到的,冒泡排序,二分查找,我们有时候写代码可能不止要查到一种数组的数据,这时候我们就很需要想循环那样的结构,来帮我们解决代码冗余的情况. 我们前面使用的main方法,是一个java程序的入口,我 ...

  6. java parcelable_Android中Parcelable的作用实例解析

    这篇文章主要介绍了Android中Parcelable的作用,对于Android初学者有一定的参考学习价值,需要的朋友可以参考下 在android提供了一种类型:Parcel.被用作封装数据的容器,封 ...

  7. java swing 注册事件_比较Java Swing中三种注册事件的方法

    Swing 是目前Java中不可缺少的窗口工具组,是建立图形化用户界面(GUI)程序的强大工具.Java Swing组件自动产生各种事件来响应用户行为.Java将事件封装成事件类,并且为每个事件类定义 ...

  8. java getmethods_java中Class.getMethods()和Class.getDeclaredMethods()方法的区别

    在java中,可以根据Class类的对象,知道某个类(接口)的一些属性(成员 ,方法,注释,注解)等.由于最近的工作中用到了这些,其中需要在代码中格局反射知道某些类的方法,查看文档的时候,看到了get ...

  9. python3函数重载_9.20 利用函数注解实现方法重载

    问题 你已经学过怎样使用函数参数注解,那么你可能会想利用它来实现基于类型的方法重载.但是你不确定应该怎样去实现(或者到底行得通不). 解决方案 本小节的技术是基于一个简单的技术,那就是Python允许 ...

最新文章

  1. Python中的*args和**kwargs是什么?该如何使用?
  2. 2017-2018-1 20155202 《信息安全系统设计基础》第10周学习总结
  3. 【调查 】DBA的压力究竟有多大?
  4. extjs tree下拉列表_Extjs中ComboBoxTree实现的下拉框树效果(自写)_extjs
  5. oracle11g打补丁故障_针对Oracle11g补丁修补说明.docx
  6. wps怎么插入目录,快速插入目录的操作步骤
  7. 雷电android模拟器端口,【雷电命令】雷电安卓模拟器修改信息及常用adb命令整理贴...
  8. 利用计算机解决鸡兔同笼问题,用计算机解决“鸡兔同笼”
  9. 微信小程序 首页弹出广告的demo
  10. c语言括号表示法画树怎么画,各种树的画法,这篇文章写得太详细了,值得收藏!...
  11. 游戏开发物理引擎PhysX研究系列:通过Unity中的物理系统学习Physx指引贴
  12. 计算机组成原理笔记|03存储系统
  13. 抖音小店无货源去哪找货源?抖店最新整改代拍公告,新规速递
  14. js mp4解码合并成ffmpeg
  15. 华硕电脑改光驱启动计算机,华硕笔记本怎么在BIOS里设置从光驱开启重装系统...
  16. 扫地机器人哪个牌子好?合格的扫地机器人推荐
  17. 建造者(Builder)模式
  18. 面向工业智能制造的组态系统设计思路与实现
  19. Dimensionality Reduction - Principle Component Analysis problem formulation
  20. Alexa 又收拾中国网站

热门文章

  1. 新电脑怎么分盘_电脑如何分盘及删除与合并04
  2. UnrealEngine4 PBR Shading Model 概述
  3. Specified key was too long; max key length is 767 bytes
  4. 阿里巴巴证实全资收购协作软件平台 Teambition
  5. DNSChanger路由器DNS劫持木马 新版本正在攻击家庭及小企业路由器 企图推送广告...
  6. java - 抽象类、接口、内部类
  7. 小P寻宝记——好基友一起走
  8. 10分钟 MySQL 入门教程
  9. 虚拟机访问本地mysql_虚拟机访问主机Mysql
  10. 集成直流稳压电源设计报告_线性直流稳压电源结构,线性直流电源技术指标