在之前的文章我们介绍了一下 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. Linux_Day001-002章常用命令

    Linux操作系统的组成 以下符号的意义. 输出重定向和输入重定向的知识点 echo 把后面的文字显示出来 xargs 分组, -n 分为n组  xargs -n 1.txt (完整命令:xargs ...

  2. Docker下使用disconf:极速体验

    Docker下的disconf实战全文链接 <Docker搭建disconf环境,三部曲之一:极速搭建disconf>: <Docker搭建disconf环境,三部曲之二:本地快速构 ...

  3. Kubernetes --- 详细介绍和架构详解

    Kubernetes是一个跨主机集群的开源的容器调度平台,它可以自动化应用容器的部署,扩展和操作,提供以容器为中心的基础架构 目录 一. Kubernetes用途 二. Kubernetes特点 三. ...

  4. WebService学习二

    了解了webservice的基础知识之后,我们来编写一个服务端和客户端,进行测试. 服务端 先写一个接口: @WebService public interface WebServiceI { //使 ...

  5. SpringMVC的工作原理图

    SpringMVC的工作原理图: SpringMVC流程 1.  用户发送请求至前端控制器DispatcherServlet. 2.  DispatcherServlet收到请求调用HandlerMa ...

  6. ES6-数组的新方法

    1.Array.of() 方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型. Array.of() 和 Array 构造函数之间的区别在于处理整数参数:Array.of(7)创建一个 ...

  7. GlusterFs卷类型分析及创建、使用(结合kubernetes集群分析)

    引言 本文通过对卷类型的分析对比,来帮助读者选取生产环境最符合服务的挂载存储,命令可结合<glusterfs详解及kubernetes 搭建heketi-glusterfs>进行实验,下面 ...

  8. 开源导入导出通用库Magicodes.ExporterAndImporter发布

    导入导出通用库 Magicodes.ExporterAndImporter为心莱团队封装的导入导出通用库,并且仍在跟随项目不断地打磨. GitHub地址: https://github.com/xin ...

  9. JDK11,JDK12没有JRE的解决方法

    jdk11和jdk12在以前版本基础上,改动有点大,安装后默认是没有jre的. 解决方法: 在JDK目录下使用bin\jlink.exe --module-path jmods --add-modul ...

  10. request的请求转发

    1.请求转发和重定向的区别 重定向: 请求转发: 可以看出,请求转发只需要发起一次请求,与重定向不同,请求转发发生在服务器内部.请求转发后浏览器的地址不会改变. 2.request请求转发 需要建立两 ...