Java连载42-this不能省略的情况、构造方法设置默认值的方法
一、 this什么时候是不能省略的,我们举个例子来说明
class User2{
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;//这里如果写成了id=id,那么根据就近原则,第一个id就是形式参数,第二个id也是形式
//参数,所以这里必须要加上this才行,类似于python中的self
}
}
this用来区分局部变量和实例变量的时候,是不能省略的。
二、我们对于构造方法的再次练习,注意我们的注释,这是这个联系的重要总结。
package com.bjpowernode.java_learning;
public class D42_ {
public static void main(String[] args) {
User2 u1 = new User2(2155,"张三");
//这里说明了两个问题
//首相可以传入参数,说明这是调用了User2类中的构造方法,可以看一下函数原型是需要两个参数的
//如果不写这连个参数,那么我们需要在类User2中增加不带参数的构造方法(也就是重载函数)
//虽然id和name是private类型的,但是我们传入参数可以看出来,照样可以修改,但是我们后面再修改的时候
//就必须得调用那两个实例函数了
System.out.println(u1.getName());
}
}
class User2{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;//这里如果写成了id=id,那么根据就近原则,第一个id就是形式参数,第二个id也是形式
//参数,所以这里必须要加上this才行,类似于python中的self
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User2(int id,String name) {
this.id = id;
this.name = name;
}
}
三、我们需要创建一个Date类用来存储我们的日期,同时这里面有一个需求:如果创建对象的时候不提供年月日的话,我们需要给这个对象一个默认值1970-01-01
package com.bjpowernode.java_learning;
public class D42_ConstructerWithDefaultValue {
public static void main(String[] args) {
Date2 d1 = new Date2(2019,10,19);
Date2 d2 = new Date2();
d1.outputDate();
d2.outputDate();
}
}
class Date2{
int year;
int month;
int day;
/**
* @param year
* @param month
* @param day
*/
public Date2(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
/**
* 需求:如果创建对象的时候不提供年月日的话,我们需要给这个对象一个默认值1970-01-01
*/
public Date2(){
this(1970,1,1);
}
public void outputDate() {
System.out.println("您想要的日期是:" + year + "年" + month + "月" + day + "日");
}
}

我们看一下这里面的两个构造函数,一个是可以传入参数的,一个是不传入参数,我们不传入参数的有个固定的格式:this(默认参数),并且这个语句必须出现在这个构造方法的第一行,有什么其他的语句,在后面写
对此可以我们解释为啥可以多这个语法,我们可以这样写
public Date2(){
year = 1970;
month = 1;
day = 1;
}
这样写运行是没有问题的,可以这样写,但是这样写代码是冗余的,因此不合适
我们还可以这样写
public Date2(){
new Date2(1970,1,1);
}
这样等于我们又创建了一个对象,这样也是不好的,因此也不用这个方法
四、我们总结一下:
this可以使用在哪里:
(1)可以使用在实例方法之中,代表当前对象【语法格式:this.】
(2)可以使用在构造方法之中,通过当前的构造方法调用其他的构造方法【语法格式:this(实参);】
(3)this()这种语法只能出现在构造方法的第一行
三、源码:
D42_theSitustionOfNotOmitTihsKeyword.java
D42_ConstructerWithDefaultValue
地址:
https://github.com/ruigege66/Java/blob/masterD42_theSitustionOfNotOmitTihsKeyword.java
https://github.com/ruigege66/Java/blob/master/D42_ConstructerWithDefaultValue
2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)
3.博客园:https://www.cnblogs.com/ruigege0000/
4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Java连载42-this不能省略的情况、构造方法设置默认值的方法的更多相关文章
- java 反射: 当Timestamp类型的属性值为null时,设置默认值
import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...
- Java连载38-对象封装性格式、构造方法
一.封装的步骤 (1)所有属性私有化,使用private关键字进行修饰,private表示私有的,修饰的所有数据只能在本类中进行访问. (2)对外提供简单的操作入口,也就是说以后外部程序要想访问age ...
- 【java】之Method和Field反射获取和设置属性值
package com.javaluna.reflect; import java.lang.reflect.Field; import java.lang.reflect.Method; impor ...
- Centos7多内核情况下修改默认启动内核方法
1.1 进入grub.cfg配置文件存放目录/boot/grub2/并备份grub.cfg配置文件 [root@linux-node1 ~]# cd /boot/grub2/ [root@linux ...
- java后台实体类设置默认值
private String orderPrice;//定义类的属性 /* * get set方法 * String.trim() 返回字符串的副本,忽略前导空白和尾部空白. */ public St ...
- Java JPA设置默认值、Timestamp设置、自动获取时间
设置默认值 @Column(name="state",columnDefinition="tinyint default 0") private Integer ...
- Java高并发与多线程(三)-----线程的基本属性和主要方法
今天,我们开始Java高并发与多线程的第三篇,线程的基本属性和主要方法. [属性] 编号(ID) 类型long 用于标识不同的线程,编号唯一,只存在java虚拟机的一次运行 名称(Name) 类型St ...
- java变量的初始化之后的默认值
对于类的成员变量 不管程序有没有显示的初始化,Java 虚拟机都会先自动给它初始化为默认值. 1.整数类型(byte.short.int.long)的基本类型变量的默认值为0. 2.单精度浮点型(f ...
- (转载)JAVA中八种基本数据类型的默认值
原文链接: http://simon-c.iteye.com/blog/1016031 引用 For type byte, the default value is zero, that is, th ...
随机推荐
- 【原】导入framework报错解决(以ReactiveObjC.framework为例)
1.当导入ReactiveObjC.framework后,进行编译时报错:framework not found xxx 报错如下图: 解决办法: Targets -> Build Se ...
- ERROR 1366 (HY000): Incorrect string value: '\xE9\x83\x91\xE5\xB7\x9E' for column 'aa' at row 1 MySQL 字符集
ERROR 1366 (HY000): Incorrect string value: '\xE9\x83\x91\xE5\xB7\x9E' for column 'aa' at row 1创建表之后 ...
- 如何在linux终端创建文件
我们都知道可以用mkdir命令创建一个新的目录,但更多时候如果能直接创建一个文件(普通文件)会让人感觉更愉悦:这样就可以不用在去打开一个专门的创建文本文件的软件,然后还要设置文件名,保存路径那样的繁琐 ...
- (办公)记事本_Linux目录和文件都能操作的命令
参考谷粒学院Linux:http://www.gulixueyuan.com/course/300/task/7082/show .cp 1.1.作用主要是拷贝,可以拷贝文件或者目录. 1.2.语法: ...
- 54. Spiral Matrix && 59. Spiral Matrix II
Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral ord ...
- [考试反思]1112csp-s模拟测试111:二重
还是AK场.考前信心赛? 而且T3的部分分还放反了所有80的都其实只有50. 总算在AK场真正AK了一次... 手感好,整场考试很顺利.要不是因为T3是原题可能就没这么好看了. 20minT1,50m ...
- JS调用MD5加密
为了系统的安全,前端一般需要对密码进行MD5加密,然后传输给后台处理.MD5的英文是Message Digest Algorithm(信息摘要算法),是不可逆的算法,只能通过暴力破解,所以较为安全. ...
- 为什么 JavaScript 中 0.1+0.2 不等于 0.3 ?
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/2kea7-jACCJmSYBQAwXyIg作者:刘洋 在 js 中进行数学的运算时,会出现0. ...
- HttpModules配置事项
前沿:还是那句话 ASP.NET管道,浏览器 - isAPI32.dll - HttpModules - HttpHandler - 返回客户端Web.Config:<httpModules&g ...
- ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)
在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入. P ...