在之前的文章我们介绍了一下 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. Intel X86 32位CPU内存管理----《Linux内核源码情景分析》笔记(一)

    Intel X86 32位CPU内存管理 在X86系列中,8086和8088是16为处理器,而从80386开始为32为处理器,80286则是该系列从8088到80386,也就是16位处理器到32位处理 ...

  2. Python操作MongoDB文档数据库

    1.Pymongo 安装 安装pymongo: pip install pymongo PyMongo是驱动程序,使python程序能够使用Mongodb数据库,使用python编写而成: 2.Pym ...

  3. mysql之innodb-锁

    本篇主要根据innodb存储引擎的锁进行阐述,包括分类,算法,以及锁的一些问题 一.锁的概述 为了保证最大程度的利用数据库的并发访问,又要确保每个用户能以一致的方式读取和修改数据,为此锁就派上了用场, ...

  4. 【LeetCode】763-划分字母区间

    title: 763-划分字母区间 date: 2019-04-15 21:10:46 categories: LeetCode tags: 字符串 贪心思想 双指针 题目描述 字符串 S 由小写字母 ...

  5. Docker 学习线路

    起因 之前的几篇博客,需要一定的docker知识(虽然可以直接上手),但是对于没有docker基础的人来说是不知道为什么要这样做的. 我把之前学习docker的步骤整理出来,希望可以帮助更多的人去学习 ...

  6. 上传文件的C#代码

    1 <%@ WebHandler Language="C#" Class="UpLoadFile" %> 2 3 using System; 4 u ...

  7. eclipse搭建springmvc

    https://www.cnblogs.com/qixing/p/qixing.html

  8. kubernetes搭建Harbor无坑及Harbor仓库同步

    一.helm搭建harbor 1.安装helm 1.1.安装helm客户端 tar -zxvf helm-v2.14.3-linux-amd64.tar.gz mv linux-amd64/helm ...

  9. laravel中利用循环实现隔行换色

    1.首先在你的路由文件定义好访问的路径 2. <!doctype html><html lang="en"><head> <meta ch ...

  10. CoDeSys

    CoDeSys是全球最著名的PLC内核软件研发厂家德国的3S(SMART,SOFTWARE,SOLUTIONS)公司出的一款与制造商无关的IEC 61131-1编程软件.CoDeSys 支持完整版本的 ...