java重载中this的作用_Java2:构造方法、方法重载和this关键字
上一篇博客小编已经给读者介绍了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关键字相关推荐
- Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法
public static void main(String[] args) {} 或者 public static void main(String args[]) {} main方法是我们学习Ja ...
- java开发中遇到的问题及解决方法(持续更新)
java开发中遇到的问题及解决方法(持续更新) 参考文章: (1)java开发中遇到的问题及解决方法(持续更新) (2)https://www.cnblogs.com/LiuYanYGZ/p/6112 ...
- java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法
在Java系统中封装SQL语言的处理方法及系统的制作方法[ 技术领域: ][0001]本发明涉及计算机数据处理 技术领域: ,特别是涉及一种在Java系统中封装SQL语言的处理方法及系统.[ 背景技术 ...
- java用redis缓存的步骤_详解在Java程序中运用Redis缓存对象的方法|chu
这段时间一直有人问如何在Redis中缓存Java中的List 集合数据,其实很简单,常用的方式有两种: 1. 利用序列化,把对象序列化成二进制格式,Redis 提供了 相关API方法存储二进制,取数据 ...
- 学习Java的第五天 | 定义方法 | 引用数据类型——类 | 访问权限-修饰符 | 全局变量与局部变量 | toString | 构造方法 | 方法重载
前面提到的,冒泡排序,二分查找,我们有时候写代码可能不止要查到一种数组的数据,这时候我们就很需要想循环那样的结构,来帮我们解决代码冗余的情况. 我们前面使用的main方法,是一个java程序的入口,我 ...
- java parcelable_Android中Parcelable的作用实例解析
这篇文章主要介绍了Android中Parcelable的作用,对于Android初学者有一定的参考学习价值,需要的朋友可以参考下 在android提供了一种类型:Parcel.被用作封装数据的容器,封 ...
- java swing 注册事件_比较Java Swing中三种注册事件的方法
Swing 是目前Java中不可缺少的窗口工具组,是建立图形化用户界面(GUI)程序的强大工具.Java Swing组件自动产生各种事件来响应用户行为.Java将事件封装成事件类,并且为每个事件类定义 ...
- java getmethods_java中Class.getMethods()和Class.getDeclaredMethods()方法的区别
在java中,可以根据Class类的对象,知道某个类(接口)的一些属性(成员 ,方法,注释,注解)等.由于最近的工作中用到了这些,其中需要在代码中格局反射知道某些类的方法,查看文档的时候,看到了get ...
- python3函数重载_9.20 利用函数注解实现方法重载
问题 你已经学过怎样使用函数参数注解,那么你可能会想利用它来实现基于类型的方法重载.但是你不确定应该怎样去实现(或者到底行得通不). 解决方案 本小节的技术是基于一个简单的技术,那就是Python允许 ...
最新文章
- Python中的*args和**kwargs是什么?该如何使用?
- 2017-2018-1 20155202 《信息安全系统设计基础》第10周学习总结
- 【调查 】DBA的压力究竟有多大?
- extjs tree下拉列表_Extjs中ComboBoxTree实现的下拉框树效果(自写)_extjs
- oracle11g打补丁故障_针对Oracle11g补丁修补说明.docx
- wps怎么插入目录,快速插入目录的操作步骤
- 雷电android模拟器端口,【雷电命令】雷电安卓模拟器修改信息及常用adb命令整理贴...
- 利用计算机解决鸡兔同笼问题,用计算机解决“鸡兔同笼”
- 微信小程序 首页弹出广告的demo
- c语言括号表示法画树怎么画,各种树的画法,这篇文章写得太详细了,值得收藏!...
- 游戏开发物理引擎PhysX研究系列:通过Unity中的物理系统学习Physx指引贴
- 计算机组成原理笔记|03存储系统
- 抖音小店无货源去哪找货源?抖店最新整改代拍公告,新规速递
- js mp4解码合并成ffmpeg
- 华硕电脑改光驱启动计算机,华硕笔记本怎么在BIOS里设置从光驱开启重装系统...
- 扫地机器人哪个牌子好?合格的扫地机器人推荐
- 建造者(Builder)模式
- 面向工业智能制造的组态系统设计思路与实现
- Dimensionality Reduction - Principle Component Analysis problem formulation
- Alexa 又收拾中国网站
热门文章
- 新电脑怎么分盘_电脑如何分盘及删除与合并04
- UnrealEngine4 PBR Shading Model 概述
- Specified key was too long; max key length is 767 bytes
- 阿里巴巴证实全资收购协作软件平台 Teambition
- DNSChanger路由器DNS劫持木马 新版本正在攻击家庭及小企业路由器 企图推送广告...
- java - 抽象类、接口、内部类
- 小P寻宝记——好基友一起走
- 10分钟 MySQL 入门教程
- 虚拟机访问本地mysql_虚拟机访问主机Mysql
- 集成直流稳压电源设计报告_线性直流稳压电源结构,线性直流电源技术指标