在之前的文章我们介绍了一下 Java 中的重载,接下来我们看一下 Java 中的构造方法。

我们之前说过,我们在定义一个变量的时候,java 会为我们提供一个默认的值,字符串为 null,数字为 0。如下:

 public class HelloWorld {
public static void main(String[] args) {
User e = new User(); // 创建一个 User 对象
e.print(); // 姓名:null 年龄:0 性别:null
}
} class User {
String name;
int age;
String gender; void print() {
System.out.print("姓名:" + name + "年龄:" + age + "性别:" + gender);
}
}

但是我们往往在使用的时候并不是想用默认的值,而是自己去定义我们想要的值,如下:

 public class HelloWorld {
public static void main(String[] args) {
// 创建一个 zs 的 User 对象
User zs = new User();
zs.name = "张三";
zs.age = 20;
zs.gender = "男";
zs.print(); // 姓名:张三 年龄:20 性别:男 // 创建一个 ls 的 User 对象
User ls = new User();
ls.name = "李四";
ls.age = 22;
ls.gender = "女";
ls.print(); // 姓名:李四 年龄:22 性别:女
}
} class User {
String name;
int age;
String gender; void print() {
System.out.print("姓名:" + name + "年龄:" + age + "性别:" + gender);
}
}

在上面的代码中,我们每次实例化一个 User 对象并赋值时,都要重复写很多代码,造成代码冗余,我们可以将初始化参数也一并写到队形的方法内来解决,如下:

 public class HelloWorld {
public static void main(String[] args) {
// 创建一个 zs 的 User 对象
User zs = new User();
zs.userInfo("张三", 20, "男");
zs.print(); // 姓名:张三 年龄:20 性别:男 // 创建一个 ls 的 User 对象
User ls = new User();
ls.userInfo("李四", 22, "女");
ls.print(); // 姓名:李四 年龄:22 性别:女
}
} class User {
String name;
int age;
String gender; void userInfo(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
} void print() {
System.out.print("姓名:" + name + "年龄:" + age + "性别:" + gender);
}
}

在上面的代码中,我们定义了一个 userInfo( ) 的方法,通过赋值的形式将参数初始化,其中 this.name = name 中的 this 关键字表示的是 调用改方法的那个对象,即 User,我们可以将其浅显地理解为 zs.name = name;或者 ls.name = name;这样我们在创建 User 实例后通过调用 userInfo( ) 方法来赋值。

通过以上方法我们就可以有效地减少我们在做初始化参数值的时候的代码冗余。

Java 其实已经为我们提供了更为简单的方法:构造方法。如下

 public class HelloWorld {
public static void main(String[] args) {
// 创建一个 zs 的 User 对象
User zs = new User("张三", 20, "男");
zs.print(); // 姓名:张三 年龄:20 性别:男 // 创建一个 ls 的 User 对象
User ls = new User("李四", 22, "女");
ls.print(); // 姓名:李四 年龄:22 性别:女
}
} class User {
String name;
int age;
String gender; User(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
} void print() {
System.out.print("姓名:" + name + "年龄:" + age + "性别:" + gender);
}
}

我们将 void userInfo() 方法改为了和类名 User 一样的 User( ),然后在初始化实例的时候直接将参数传入,使代码更加简洁。

其实我们之前一直写的 User zs = new User( ) 就是一个无参数构造方法。

在有的时候,我们常常会根据也无需要来传递自己想要的参数,类似于之前提到的窗口支付问题,那就需要用到重载,构造方法也是可以重载的,如下:

 public class HelloWorld {
public static void main(String[] args) {
// 创建一个 zs 的 User 对象
User zs = new User();
zs.print(); // 姓名:null 年龄:0 性别:null // 创建一个 ls 的 User 对象
User ls = new User("李四", 22, "女");
ls.print(); // 姓名:李四 年龄:22 性别:女
}
} class User {
String name;
int age;
String gender; User(){ } User(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
} void print() {
System.out.print("姓名:" + name + "年龄:" + age + "性别:" + gender);
}
}

我们对构造方法的 User( ) 进行了重载,这样就可以根据需求来初始化自己想要的参数了。

构造方法的定义与约束:

1、常常用于给成员变量赋初始值

2、与类同名,没有返回类型

3、在创建(new)对象时被自动调用

4、若自己不写构造方法,则编译器默认提供无参构造,若自己写了构造,则不再默认提供。

5、构造方法可以重载

Java 从入门到进阶之路(八)的更多相关文章

  1. Java 从入门到进阶之路(十八)

    在之前的文章我们介绍了一下 Java 中的正则表达式,本章我们来看一下 Java 中的 Object. 在日常生活中,任何事物我们都可以看做是一个对象,在编程中是同样的道理,在 Java 编程中其实更 ...

  2. Java 从入门到进阶之路(二十八)

    在之前的文章我们都是通过 Java 在内存中应用,本章开始我们来看一下 Java 在系统文件(硬盘)上的操作. 系统文件就是我们电脑中的文件,简单来说就是像 Windows 系统中 C D E 等各类 ...

  3. Java 从入门到进阶之路(二)

    之前的文章我们介绍了一下用 IDEA 编辑器创建一个 Java 项目并输出 HelloWorld,本章我们来看一下 Java 中的变量和基本数据类型. 在这之前我们先来看一下 Java 中的关键字,这 ...

  4. Java 从入门到进阶之路(十九)

    在之前的文章我们介绍了一下 Java 中的Object,本章我们来看一下 Java 中的包装类. 在 Java 中有八个基本类型:byte,short,int,long,float,double,ch ...

  5. Java 从入门到进阶之路(一)

    写在前面:从本片文章开始,将记录自己学习 Java 的点滴路程,目标定的并不是让自己成为一个 Java 高手,而是让自己多掌握一门语言,使自己的知识面更广一些,在学习 Java 的过程中如有不对的地方 ...

  6. Java 从入门到进阶之路(三)

    之前的文章我们介绍了 Java 中的变量和基本数据类型,本章我们来看一下 Java 的运算符和表达式. 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操 ...

  7. Java 从入门到进阶之路(四)

    之前的文章我们介绍了 Java 的运算符和表达式,本章我们来看一下 Java 的循环结构. 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性进行. 循环的 ...

  8. Java 从入门到进阶之路(五)

    之前的文章我们介绍了 Java 的循环结构,本章我们来看一下 Java 的数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. 数组 - 相同数据类型的元 ...

  9. Java 从入门到进阶之路(六)

    之前的文章我们介绍了 Java 的数组,本章我们来看一下 Java 的对象和类. Java 是一种面向对象语言,那什么是对象呢,对象在编程语言中属于一个很宽泛的概念,我们可以认为万事万物都是对象,每个 ...

随机推荐

  1. Python 单元测试框架系列:聊聊 Python 的单元测试框架(一):unittest

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  2. Java,哈希码以及equals和==的区别

    从开始学习Java,哈希码以及equals和==的区别就一直困扰着我. 要想明白equals和==的区别首先应该了解什么是哈希码,因为在jdk的类库中不管是object实现的equals()方法还是S ...

  3. Jmeter 逻辑控制器 之 事务控制器

    前面我在做性能测试的时候,由于我们的系统是需要登录的,登录成功后,系统默认加载其订单数据,因此在用户看来这是一个操作.所以为了模拟这个操作,我需要访问两个接口,并且把这两个接口的响应时间算在一起,那么 ...

  4. Winform中怎样根据Name获取同窗体的控件

    场景 在同一个Winform窗体中,点击一个Button按钮时, 获取同窗体的其他控件的属性. 首先需要对要获取的控件赋予Name属性,然后就可以通过Name进行获取. 实现 在Button的点击事件 ...

  5. js 正则表达式:价格的校验

    /*验证单价:包括两位小数*/var priceReg = /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/;var price=$("#price& ...

  6. IntelliJ IDEA 安装,配置,汉化

    压缩包:加QQ:1594216971 一.先进行安装包下载安装(五步) 1.运行”IntelliJ IDEA 2018.1.exe“ 开始安装,点击next 2.选择idea安装目录(不建议安装在c盘 ...

  7. 关于mock

    关于mock 一.什么是mock? 通俗来讲,在开发和测试过程中,由于环境不稳定或者协同开发的同事未完成等情况下,有些数据不容易构造或者不容易获取,就创建一个虚拟的对象或者数据样本,用来辅助开发或者测 ...

  8. Linux之正则表达式grep

    真好!

  9. 40 (OC)* 数据库常见sql语句

    1:增加INSERT INTO t_student (name, age) VALUES ('liwx', 18);2:删除DELETE FROM t_student WHERE name = 'li ...

  10. GS-PON数据库分区列范围查询优化案例

    查询慢的SQL: with p as( select np.nodecode , np.nodename, d.deviceid, d.devicename, d.loopaddress, p.res ...