在之前的文章我们介绍了一下 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. SVN更新失败

    一.svn更新失败 使用svn遇到的问题是,更新失败,代码被锁定. 解决办法: 在项目上右键,如图所示: 图一: ​ 图二: ​ 之后再更新,基本上都没有问题了.如果还有问题,看下面. 二.工具清理 ...

  2. Android-打包AAR步骤以及最为关键的注意事项!

    ### 简介 最近因为项目的要求,需要把开发的模块打包成aar,供其他项目调用,在搞了一段时间后,发现这里还是有很多需要注意的地方,所以记录一下,帮助大家不要走弯路. **首先何为aar包?** ![ ...

  3. java多线程之ThreadPoolExecutor

    ThreadPoolExecutor类 简介   java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必须 ...

  4. NOIP要炸?

    今天起床,翻我的群,突然看见一条消息: “NOIP要被禁赛了!” 莫名奇妙啊...... 于是我就进去看了看,网上疯传,搞得跟真的一样,差点吓到我了. 但好在每个人心中都有一个阿Q,会精神胜利法,于是 ...

  5. 拒绝一次性买卖:MyBatis的mapper和repository可重复生成工具

    背景 MyBatis的历史可谓久远了,码农们也在用着各式各样的代码生成工具.然而这些工具大部分都有一个缺点,那就是只能一次性生成文件.如果我们期间在生成的文件里做了修改,再次生成时,很多工具会覆盖我们 ...

  6. postman--请求以及变量设置的实例练习

    我们可以在2个地方添加需要执行的js脚本,一个是Pre-request Script,还有一个tests,我们先看请求之前的 1 在请求被发送到服务器之前:就是在“Pre-request Script ...

  7. Java抽象类构造方法

    java中抽象类的子类的构造方法会隐含父类的无参构造方法. package com.zempty.abstractclass; public class AbstractDemo01 { public ...

  8. 排列组合算法的Java实现

    转载于:http://cgs1999.iteye.com/blog/2327664

  9. Spring框架学习笔记(2)——面向切面编程AOP

    介绍 概念 面向切面编程AOP与面向对象编程OOP有所不同,AOP不是对OOP的替换,而是对OOP的一种补充,AOP增强了OOP. 假设我们有几个业务代码,都调用了某个方法,按照OOP的思想,我们就会 ...

  10. Cannot find class: com.mysql.jdbc.Driver错误及解决办法。

    在刚刚开始搭建Mybatis源码解析,一步一步从浅入深 简单示例的时候,我使用的是mysql 5.1.12版本的驱动包.运行时出现如下错误: Cause: java.sql.SQLException: ...